Negative Lookahead: попытка сопоставить одно слово и опровергнуть следующие слова - PullRequest
0 голосов
/ 23 января 2019

У меня есть регулярное выражение типа

^.*\bfrost.*(?!flakes|snowman).*$

Я проверяю его по следующим строкам:

frosted flakes
frosty snowman
frost, jack

См. это Regex.101 демо.

Я хочу, чтобы совпадало только третье выражение, но все три совпадают.

REGEX Try

1 Ответ

0 голосов
/ 23 января 2019

Вы должны переместить вторую .* в поле зрения, например,

^.*\bfrost(?!.*(?:flakes|snowman)).*$

или

^.*\bfrost(?!.*flakes|.*snowman).*$

См. Демонстрационную версию regex

В исходном регулярном выражении указатель находится после .*, и всякий раз, когда указатель возвращает ложь, механизм регулярных выражений может возвращать и по-прежнему сопоставлять строку другим способом, местоположение, за которым сразу не следует snowman или flakes.Когда вы вводите .* в поле зрения, эти два слова не обязательно должны появляться сразу справа от текущего местоположения.

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