Я шукаю регулярний вираз, який би відповідав лише одному слову, не є частиною більш довгого слова.
Нехай "s припустимо, що слово" невдача ", тому ось кілька прикладів
failure bla bla
- повинні відповідатиbla failure.
- повинні відповідатиno-failure bla
- не повинні відповідати
В основному failure
рядок не повинен мати жодного [dw-_]
навколо нього, щоб вважати його частиною
Відповіді:
2 для відповіді № 1Оскільки ви "включаєте тире в групу символів, що складають слово, ви не можете це робити з межами слова; вам потрібні орієнтовні твердження (які підтримуються Java):
(?<![w-])failure(?![w-])
повинен це зробити.
Пояснення:
(?<![w-]) # Assert no alphanumeric or dash before the current position
failure # Match "failure"
(?![w-]) # Assert no alphanumeric or dash after the current position
2 для відповіді № 2
Якщо ваш аромат регексу підтримує його, ви можете використовувати b
відповідати на перерві слова, напр. /bfailureb/
.
0 для відповіді № 3
Не дуже вдалий випадок для Regex.
Чому б String.split не розбити його на слова, а потім порівняти кожне слово з цільовим (оскільки те, що ви говорите, це, що воно повинно збігатися лише у тому випадку, якщо воно розділене пробілами).
Добре, String.split НЕ використовує Regex, але це набагато більш контрольовано, і вам дійсно потрібен лише розділений на простір за замовчуванням або, можливо, ви хочете додати періоди (Отже, ваш другий приклад відповідав би).