Вы думаете об этом правильно. Но, к сожалению, lookbehinds обычно имеют фиксированную длину. Единственным существенным исключением из этого является механизм регулярных выражений .NET, который позволяет квантификаторы повторения внутри просмотра назад. Но так как вам нужен только негативный взгляд назад, а не взгляд вперед. Для вас есть хак. Переверните строку, затем попробуйте сопоставить:
/rab(?!.{0,10}oof)/
Затем измените результат совпадения или вычтите совпадающую позицию из длины строки, если это то, что вам нужно.
Теперь, исходя из приведенного вами регулярного выражения, я предполагаю, что это была лишь упрощенная версия того, что вам действительно нужно. Конечно, если bar
сам по себе является сложным шаблоном, нужно еще немного подумать о том, как правильно его обратить.
Обратите внимание, что если ваш шаблон требует как просмотра назад, так и просмотра вперед переменной длины, вам будет труднее решить эту проблему. Кроме того, в вашем случае можно было бы разобрать ваш внешний вид на несколько переменных длины (поскольку вы не используете ни +
, ни *
):
/(?<!foo)(?<!foo.)(?<!foo.{2})(?<!foo.{3})(?<!foo.{4})(?<!foo.{5})(?<!foo.{6})(?<!foo.{7})(?<!foo.{8})(?<!foo.{9})(?<!foo.{10})bar/
Но не все так хорошо, не так ли?
person
Martin Ender
schedule
30.11.2012