Regex смотреть вперед / назад с границей слова - PullRequest
0 голосов
/ 30 марта 2020

Сначала у меня есть регулярное выражение cat(?=mouse\b), которое совпадает с cat в catmouse x. Но я хочу версию, в которой есть граница слова между cat и mouse. Поэтому я попробовал эти регулярные выражения

  • cat(?=\bmouse\b)
  • cat\b(?=mouse\b)

Но ни один из вышеперечисленных не соответствует cat в cat mouse x. Как мне выполнить это? 1019 * это?

Ответы [ 2 ]

1 голос
/ 30 марта 2020

О, вы так близко:)
Я думаю, вы не до конца поняли границу слова \b.

Как \ b работает в регулярном выражении

В начале строки оно будет следить за тем, чтобы ваше слово начиналось с символов, следующих за ним. \bmouse будет соответствовать каждому слову, начинающемуся с мыши.

Regex: '/\bmouse/'
Matches: Mouse, MouseMouse, MouseCat, Mouse...
Fails: CatMouse, MyMouse, EtcMouse

Если после строки ставится \b, это гарантирует, что слово не будет продолжено.

Regex: '/mouse\b/'
Matches: Mouse, MouseMouse, CatMouse, ...Mouse
Fails: MouseCat, MouseHouse, MouseEtc

Установка оба вместе гарантируют, что у вас есть вложенное слово

Regex: '/\bmouse\b/'
Matches: Mouse
Fails: NoMouse, MouseNo, NoMouseNo

Результаты

\b в основном говорит вам только о комбинированном слове. Если вы хотите что-то дополнительное, вы должны упомянуть это. Вероятно, вам нужно следующее регулярное выражение:

cat(?=[.,\ ]mouse\b)

Примечание. Первое \b было заменено символами, которые вы хотите отфильтровать.

1 голос
/ 30 марта 2020

Вы можете добавить в пробел дополнительный пробел, поскольку граница слова между catmouse

cat(?= ?mouse\b)

Regex demo

Чтобы сопоставить точку, запятую или пробел и не совпадать catmouse, вы можете использовать класс символов:

cat(?=[\s.,]mouse\b)

Объяснение

  • cat Соответствует литералу
  • (?= Позитивное предвидение, утверждайте, что прямо направо:
    • [\s.,] Соответствует либо символу пробела, точке или запятой
    • mouse\b Совпадение mouse и граница слова
  • ) Закрыть взгляд

Regex demo

Если вы не хотите, чтобы cat была частью более крупного слова, вы можете добавить границу слова \bcat


Согласно www.regular-expressions.info связанной документации, есть три различных позиции, которые квалифицируются как границы слов:

  • Перед первым символом в строке, если первый символ является символом слова.
  • После последнего символ в строке, если последний символ является символом слова.
  • Между двумя символами в строке, где один является символом слова, а другой - не символом слова.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...