Как сделать отрицательную предварительную работу с концом текста строки

У меня есть regex как следующее:

.{0,1000}(?!(xa7|para(graf))$)

использование Java. Я ожидал, что это заставит следующий текст перестать работать:

blaparagraf

потому что параграф найден в конце

5
задан Lombo 10 June 2010 в 00:01
поделиться

2 ответа

Это потому, что .{0,1000} будет соответствовать всей теме, поэтому за ним не следует xa7 или paragraf (за ним следует только $).

Вы хотите получить отрицательный lookbehind:

.{0,1000}(?<!xa7|paragraf)$
7
ответ дан 18 December 2019 в 16:36
поделиться

Частой ошибкой является неправильное размещение утверждений. Если вы хотите использовать 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)
5
ответ дан 18 December 2019 в 16:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: