Соответствие многострочным блокам HTML, почему так жадно? - PullRequest
0 голосов
/ 30 октября 2018

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

Я собираюсь использовать php preg_replace() для удаления строф из кода SVG.

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

<div>
TRUE
</div>

<div>
FALSE
</div>

<div>
MAYBE
</div>

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

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

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

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

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

1 Ответ

0 голосов
/ 30 октября 2018

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

Этот работает

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

<div.*?

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

(?:.(?!<div))

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

...