Регулярное выражение: соответствует последнему вхождению нескольких возможных слов, где одно слово является конечным подмножеством другого - PullRequest
0 голосов
/ 10 июля 2019

Я не уверен, правильно ли я сформулировал этот вопрос и / или был ли он немного дремучим.У меня есть следующее регулярное выражение:

^.*(foobar|bar|abc|xyz)

... и я хочу сопоставить последнее вхождение любого из приведенных выше слов.Первоначальный квантификатор является жадным, поэтому я получу удар по последнему вхождению, а не по первому, но одно из слов foo является последним подмножеством другого foobar, поэтому, если у меня есть предложение one abc two foobar three, тогдагрупповой матч bar, что я не ищу.Это должно быть foobar.

https://regex101.com/r/fEzBal/1

1 Ответ

1 голос
/ 10 июля 2019

Решение состоит в том, чтобы использовать границы слов \b до и после вашей группы для принудительного сопоставления всего слова.

^.*\b(foobar|bar|abc|xyz)\b

Из документации:

\ b соответствует, без использования каких-либо символов, непосредственно между символом, совпадающим с \ w, и символом, не соответствующим \ w (в любом порядке).

Демо

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