匹配多行HTML块,为什么这么贪心?

时间:2018-10-30 14:07:52

标签: php html regex multiline greedy

我试图在一天中的大部分时间里都可以正常工作。 在这一点上,我什至不记得自己曾经尝试过什么,还没有尝试过,所以现在我要寻求帮助!

我将使用php的preg_replace()从svg代码中删除节。

但是这个简单的例子可以显示我面临的问题:

<div>
TRUE
</div>

<div>
FALSE
</div>

<div>
MAYBE
</div>

我该如何匹配中间div? 我的正则表达式的一个简单版本是

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

That doesn't work,因为它将与前2个div匹配,而不仅仅是中间一个。

(将匹配项向左扩展时,它仍然被称为贪婪吗?)

我尝试过的所有变化都无济于事。 我敢肯定,有一个简单的答案,就是我自己找不到。

1 个答案:

答案 0 :(得分:-1)

好的,当然,我在发布问题后不久就找到了解决方案。

This one works

基本上,原始正则表达式始于

<div.*?

正确的答案是将.替换为

(?:.(?!<div))

这是一个非捕获组,使用.<div的负前瞻 由于先行和后方都不是匹配的一部分....这相当于:匹配“任何内容”,除了<div