String.contains
String.containsdział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.containsnie 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.matchesz 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 \bkontrole na granicy słowa, tak, aby nie dostać się do meczu restores store products. Zauważ, że stores 3store_productjest 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 productnie będzie pasować do powyższego wyrażenia regularnego, ponieważ szukasz słowa storebez 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.