/ / Regexp для виявлення слова, лише якщо воно не є частиною довшого слова? - java, регекс

Regexp виявляти слово тільки в тому випадку, якщо воно не є частиною довшого слова? - java, regex

Я шукаю регулярний вираз, який би відповідав лише одному слову, не є частиною більш довгого слова.

Нехай "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, але це набагато більш контрольовано, і вам дійсно потрібен лише розділений на простір за замовчуванням або, можливо, ви хочете додати періоди (Отже, ваш другий приклад відповідав би).