Supponiamo, ho una stringa:Perché devo specificare l'intera stringa nell'espressione regolare Java?
String str = "some strange string with searched symbol";
E voglio cercare in essa alcuni simboli, supponiamo sarà "string"
. Quindi abbiamo un seguente:
str.matches("string"); //false
str.matches(".*string.*"); //true
Quindi, come indicato nel titolo, perché devo specificare intera stringa in Java espressione regolare?
documentazione Java dice:
pubbliche partite booleani (String regex)
indica se o no questa stringa corrisponde all'espressione regolare data.
Non dice
indica se o no tutto questo stringa corrisponde all'espressione regolare data.
Ad esempio, nel php
sarebbe:
$str = "some strange string with searched symbol";
var_dump(preg_match('/string/', $str)); // int(1)
var_dump(preg_match('/.*string.*/', $str)); //int(1)
Quindi, entrambe le regex di sarà true
.
e credo che questo è corretto, perché se voglio mettere alla prova tutta la stringa che vorrei fare str.matches("^string$");
PS: Sì, lo so che è quello di cercare un stringa, più semplice e più veloce sarà quello di utilizzare str.indexOf("string")
oppure str.contains("string")
. La mia domanda riguarda solo l'espressione regolare di Java.
UPDATE: Come affermato da @ ChrisJester-Young (e @GyroGearless) una delle soluzioni, se si vuole cercare regex
che fa parte di una stringa soggetto, è quello di utilizzare find()
metodo come questo:
String str = "some strange string with searched symbol";
Matcher m = Pattern.compile("string").matcher(str);
System.out.println(m.find()); //true
è possibile utilizzare 'find' func all'interno di' if'. –
Javadoc per la classe 'Matcher' è piuttosto chiaro su questo:" Il metodo match cerca di far corrispondere l'intera sequenza di input al pattern. " –
Java ha pochi problemi con i metodi non intenzionali di denominazione nel reparto regex. Ad esempio 'replace (str, str)' vs 'replaceAll (str, str)'. Non è ovvio che * solo * la differenza tra questi due sia che 'replace' non usa la sintassi regex mentre' replaceAll' fa (entrambi i metodi sostituiranno tutte le occorrenze o il testo selezionato). Sfortunatamente tutto ciò che possiamo fare ora è accettarlo, fare la nostra parte di errori e infine abituarci. – Pshemo