String.contains
String.containsarbeitet 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.containsnicht 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.matchesmit 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 \bprüft auf Wortgrenze, damit Sie keine Übereinstimmung für bekommen restores store products. Beachten Sie, dass dies stores 3store_productebenfalls 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 productstimmt nicht mit dem obigen regulären Ausdruck überein, da Sie nach dem Wort storeohne 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.