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.\\b
\
aby określić pojedynczy\
, więc\\b
zostanie zinterpretowany jako\b
, jak widać w wyrażeniu regularnym RAW.\b
dopasowuje granicę słowa, jak wyjaśniono powyżej.matcher.find()
robi to, czego potrzebujesz. Przykład:źródło
Możesz po prostu użyć
matches
metody klasy String.źródło
.*
lub dopasuje tylko ciągi zaczynające się odstores
.Jeśli chcesz sprawdzić, czy ciąg zawiera podłańcuch, czy nie za pomocą wyrażenia regularnego, najbliższe co możesz zrobić, to użyć find () -
Zwróć uwagę na różnicę między match () a find (), match () zwraca prawdę, jeśli cały ciąg pasuje do podanego wzorca. find () próbuje znaleźć podciąg, który pasuje do wzorca w podanym ciągu wejściowym. Również używając find () nie musisz dodawać dodatkowego dopasowania, takiego jak - (? S). * Na początku i. * Na końcu wzorca wyrażenia regularnego.
źródło
1. wynik: prawda
2. wynik: prawda
źródło
fromIndex
jest ignorowane, prawda?contains("something", test, 5) => true