String.contains
String.contains
arbeitet mit String, Punkt. Es funktioniert nicht mit Regex. Es wird geprüft, ob die genaue angegebene Zeichenfolge in der aktuellen Zeichenfolge angezeigt wird oder nicht.
Beachten Sie, dass String.contains
nicht nach Wortgrenzen gesucht wird. es wird einfach nach Teilzeichenfolgen gesucht.
Regex-Lösung
Regex ist leistungsfähiger als String.contains
, da Sie (unter anderem) Wortgrenzen für die Schlüsselwörter erzwingen können. Dies bedeutet, dass Sie nach den Schlüsselwörtern als Wörter und nicht nur nach Teilzeichenfolgen suchen können .
Verwenden Sie String.matches
mit dem folgenden regulären Ausdruck:
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
Die RAW-Regex (entfernen Sie das im Zeichenfolgenliteral vorgenommene Escapezeichen - dies erhalten Sie, wenn Sie die obige Zeichenfolge ausdrucken):
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
Die \b
prüft auf Wortgrenze, damit Sie keine Übereinstimmung für bekommen restores store products
. Beachten Sie, dass dies stores 3store_product
ebenfalls abgelehnt wird, da Ziffern und _
als Teil eines Wortes betrachtet werden, aber ich bezweifle, dass dieser Fall im natürlichen Text erscheint.
Da die Wortgrenze für beide Seiten aktiviert ist, sucht der Regex oben nach genauen Wörtern. Mit anderen Worten, stores stores product
stimmt nicht mit dem obigen regulären Ausdruck überein, da Sie nach dem Wort store
ohne suchen s
.
.
Normalerweise stimmen alle Zeichen mit Ausnahme einiger neuer Zeilenzeichen überein . (?s)
zu Beginn .
passt jeder Charakter ausnahmslos zusammen (danke an Tim Pietzcker für den Hinweis).
(?s)
den Anfang Ihrer Regex hinzufügen , falls die Zeichenfolge Zeilenumbrüche enthält.\\b
\
einen einzelnen angeben\
, so\\b
wird als interpretiert werden\b
, wie in der RAW - regex gesehen.\b
entspricht der Wortgrenze, wie oben erläutert.matcher.find()
macht was du brauchst. Beispiel:quelle
Sie können einfach die
matches
Methode der String-Klasse verwenden.quelle
.*
sonst werden nur Zeichenfolgen abgeglichen, die mit beginnenstores
.Wenn Sie überprüfen möchten, ob eine Zeichenfolge Teilzeichenfolgen enthält oder keinen regulären Ausdruck verwendet, können Sie am besten find () - verwenden.
Beachten Sie den Unterschied zwischen Übereinstimmungen () und find (). Übereinstimmungen () geben true zurück, wenn die gesamte Zeichenfolge mit dem angegebenen Muster übereinstimmt. find () versucht, einen Teilstring zu finden, der dem Muster in einer bestimmten Eingabezeichenfolge entspricht. Wenn Sie find () verwenden, müssen Sie auch keine zusätzlichen Übereinstimmungen wie - (? S). * Am Anfang und. * Am Ende Ihres Regex-Musters hinzufügen.
quelle
1. Ergebnis: wahr
2. Ergebnis: wahr
quelle
fromIndex
wird ignoriert, nicht wahr?contains("something", test, 5) => true