String.contains
работает со строкой, периодом. Он не работает с регулярным выражением. Он проверяет, отображается ли точная строка в текущей строке или нет.
Обратите внимание, что String.contains
не проверяет границу слова; он просто проверяет подстроку.
Regex является более мощным, чем String.contains
, поскольку вы можете принудительно применять границу слова по ключевым словам (между прочим). Это означает, что вы можете искать ключевые слова как words , а не только подстроки .
Используйте 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)
в начале делает .
совпадением с любым символом без исключения (спасибо Тиму Пицкеру за указание этого).