String.contains
String.contains
działa z String, kropka. To nie działa z wyrażeniem regularnym. Sprawdza, czy dokładny określony ciąg pojawia się w bieżącym ciągu, czy nie.
Zauważ, że String.contains
nie sprawdza granicy słów; po prostu sprawdza podciąg.
Rozwiązanie Regex
Regex jest potężniejszy niż String.contains
, ponieważ możesz wymusić granice słów na słowach kluczowych (między innymi). Oznacza to, że możesz wyszukiwać słowa kluczowe jako słowa , a nie tylko podciągi .
Użyj String.matches
z następującym wyrażeniem regularnym:
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
Wyrażenie regularne RAW (usuń znaki ucieczki wykonane w literale ciągu - oto, co otrzymujesz po wydrukowaniu powyższego ciągu):
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
Te \b
kontrole na granicy słowa, tak, aby nie dostać się do meczu restores store products
. Zauważ, że stores 3store_product
jest to również odrzucane, ponieważ cyfry i _
są uważane za część słowa, ale wątpię, aby ten przypadek pojawił się w tekście naturalnym.
Ponieważ granica słowa jest sprawdzana po obu stronach, powyższe wyrażenie regularne będzie wyszukiwać dokładne słowa. Innymi słowy, stores stores product
nie będzie pasować do powyższego wyrażenia regularnego, ponieważ szukasz słowa store
bez s
.
.
normalnie dopasowuje dowolny znak poza liczbą znaków nowego wiersza . (?s)
na początku .
dopasowuje każdą postać bez wyjątku (podziękowania dla Tima Pietzckera za zwrócenie uwagi).
(?s)
na początku swojego wyrażenia regularnego na wypadek, gdyby ciąg zawierał nowe linie.