Соответствие многострочным блокам HTML, почему так жадно?

Я пытался заставить это работать большую часть дня.
На данный момент я даже не могу вспомнить, что я пробовал и что я не пробовал, так что теперь я прошу помощи!

Я собираюсь использовать PHP preg_replace() удалить строфы из кода SVG.

Но проблема, с которой я сталкиваюсь, может быть показана на этом гораздо более простом примере:

<div>
TRUE
</div>

<div>
FALSE
</div>

<div>
MAYBE
</div>

Как мне сопоставить средний div?
Простая версия моего регулярного выражения

(?s)<div.*?FALSE.*?<\/div>

Это не работает, так как он будет соответствовать первым 2 дивам, а не только среднему.

(он все еще называется жадным, когда расширяет совпадение влево?)

Все варианты, которые я пробовал, ни к чему не привели.
Я уверен, что есть простой ответ, я просто не мог найти его самостоятельно.

0

Решение

Хорошо, конечно, я нашел решение вскоре после того, как опубликовал вопрос.

Это работает

В основном оригинальное регулярное выражение началось с

<div.*?

И правильный ответ должен был заменить это . с

(?:.(?!<div))

Который является группой без захвата, используя . с негативным прогнозом <div
Так как ни упущение, ни упущение не могут быть частью матча …. Это означает: соответствовать «Все», кроме <div

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]