У меня есть regex как следующее:
.{0,1000}(?!(xa7|para(graf))$)
использование Java. Я ожидал, что это заставит следующий текст перестать работать:
blaparagraf
потому что параграф найден в конце
Это потому, что .{0,1000}
будет соответствовать всей теме, поэтому за ним не следует xa7
или paragraf
(за ним следует только $
).
Вы хотите получить отрицательный lookbehind:
.{0,1000}(?<!xa7|paragraf)$
Частой ошибкой является неправильное размещение утверждений. Если вы хотите использовать lookahead, шаблон будет выглядеть примерно так:
^(?!.*paragraph$).*$
This matches (as seen on rubular.com):
something something para
paragraph something something
But doesn't match:
something paragraph
Итак, ключевое различие здесь в том, что мы начинаем смотреть вперед с начала строки, прежде чем мы найдем .*
(или .{0,1000}
в вашем случае). Конечно, мы ищем не просто paragraph$
, а скорее .*paragraph$
.
Тем не менее, для проверки того, что строка не заканчивается чем-то конечной длины, наиболее естественным решением является lookbehind при поддержке.
^.*$(?<!paragraph)