Регулярное выражение — где строка содержит «bar», но не имеет предшествующего «foo»

Регулярное выражение — где строка содержит «bar», но не имеет предшествующего «foo»

В настоящее время у меня есть регулярное выражение для поиска строк, содержащих «bar», но не предваряемых «foo»:

(?<!foo)bar

Я хочу изменить регулярное выражение для соответствия строкам, содержащим «bar», но не предваряемым «foo» и (необязательно) какими-либо дополнительными символами.

НАПРИМЕР, «footestbar» не должен совпадать, так как bar предшествует «foo», а за ним следует «test».

Я не могу найти способ сделать это, так как регулярные выражения не позволяют использовать квантификатор в отрицательном ретроспективном просмотре. Соответственно, я не могу сделать следующее:

(?<!foo.*)bar

Есть ли альтернативный подход?

ОБНОВЛЯТЬ:
Разновидность регулярного выражения:re2. В настоящее время я просматриваю документацию, но на первый взгляд заметил следующее:

(?<!re)     after text not matching re (NOT SUPPORTED)

Поэтому решение не может использовать отрицательный ретроспективный анализ (если я правильно интерпретирую документацию).

решение1

Измененный пост

Так что, похоже, некоторые (большинство?) движков Regex работают только с фиксированной длиной lookbehind. Однако они, похоже, прекрасно принимают переменную длину lookahead. Я не уверен, какой у вас вариант использования этого или насколько это будет жизнеспособно, но одна из идей может заключаться в том, чтобы перевернуть вашу строку и использовать:

rab(?!.*oof)

введите описание изображения здесь

Конечно, это выглядит смешно, и я не знаю, как вы это используете или насколько это будет полезно. Большая часть моего опыта с Regex была связана с использованием .NET, и в основном мне не нужны были ретроспективные просмотры. Просто идея для вас..!

Оригинальный пост - Работает только с определенными движками Regex (проверено с использованием .NET)

Попробуйте следующее регулярное выражение:

(?<!foo(?:.*)?)bar

Это добавляет необязательную, не захватывающую группу в пределах того же отрицательного взгляда назад.

введите описание изображения здесь

Связанный контент