Это проблематично, потому что большинство разновидностей не поддерживают просмотр переменной длины, поэтому вы не можете проверить всю строку.Простой подход состоит в том, чтобы сопоставить всю строку вместо использования обходных путей:
^(?!.*\bbears\b).*?\blive and\b(.*?)\bwoods\b
Здесь то, что ранее было целым совпадением, является первой группой захвата.В зависимости от того, что вы используете, это может сделать замену этого текста немного менее удобной.Убедитесь, что используется флаг мультилинии (/m
), а не установлен флаг одной строки (точка-все или /s
).
Рабочий пример: http://rubular.com/r/TuADb2vB4w
Обратите внимание, что проблема становится очень простой, если вы можете решить ее в два этапа: отфильтровать строки с помощью \bbears\b
и сопоставить искомую строку.