String.contains
String.containsпрацює зі String, період. Він не працює з регулярним виразом. Він перевірить, чи вказано точний рядок у поточному рядку чи ні.
Зверніть увагу, що String.containsне перевіряється межа слова; він просто перевіряє наявність підрядків.
Розчин Регексу
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)до початку свого регулярного виразу, якщо рядок містить нові рядки.