String.contains
String.contains
работает со строкой, точка. Это не работает с регулярным выражением. Он проверит, отображается ли указанная строка в текущей строке или нет.
Обратите внимание, что String.contains
не проверяется граница слова; он просто проверяет наличие подстроки.
Решение Regex
Regex более эффективен, чем String.contains
, поскольку вы можете установить границу слов для ключевых слов (среди прочего). Это означает, что вы можете искать ключевые слова как слова , а не просто подстроки .
Используйте String.matches
со следующим регулярным выражением:
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
Регулярное выражение RAW (удалите экранирование, сделанное в строковом литерале - это то, что вы получите, распечатав строку выше):
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
В \b
проверяет границы слова, так что вы не получите спичку restores store products
. Обратите внимание, что stores 3store_product
это также отклоняется, поскольку цифры и _
считаются частью слова, но я сомневаюсь, что этот регистр появляется в естественном тексте.
Поскольку граница слова проверяется с обеих сторон, регулярное выражение выше будет искать точные слова. Другими словами, stores stores product
не будет соответствовать регулярному выражению выше, так как вы ищете слово store
без s
.
.
обычно соответствует любому символу, кроме нескольких символов новой строки . (?s)
в начале .
соответствует любому символу без исключения (спасибо Тиму Пицкеру за указание на это).
(?s)
в начало вашего регулярного выражения, если строка содержит символы новой строки.