Добавление другого обработчика на одном сервере Jetty

String.contains

String.contains работает со строкой, периодом. Он не работает с регулярным выражением. Он проверяет, отображается ли точная строка в текущей строке или нет.

Обратите внимание, что String.contains не проверяет границу слова; он просто проверяет подстроку.

Regex solution

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) в начале делает . совпадением с любым символом без исключения (спасибо Тиму Пицкеру за указание этого).

13
задан Prasath 19 August 2019 в 09:37
поделиться