Php Regex可以剥离任何不属于';不是html注释

Php Regex可以剥离任何不属于';不是html注释,php,regex,Php,Regex,我知道使用正则表达式来解析html通常是不容易的,但我不想要任何聪明的东西 以此为例, <div><!--<b>Test</b>-->Test</div> <div><!--<b>Test2</b>-->Test2</div> 标记保证正确匹配(没有未关闭/嵌套的注释) 我需要使用什么正则表达式?替换模式: (?s)((?!-->).)*<!--|-->((

我知道使用正则表达式来解析html通常是不容易的,但我不想要任何聪明的东西

以此为例,

<div><!--<b>Test</b>-->Test</div>
<div><!--<b>Test2</b>-->Test2</div>
标记保证正确匹配(没有未关闭/嵌套的注释)

我需要使用什么正则表达式?

替换模式:

(?s)((?!-->).)*<!--|-->((?!<!--).)*
它还打印:

test2

从Ideone上可以看到:

s/-->.*

.*?<!--(.*?)-->.*?(?=<!--|$)
看到了吗


如果您逐行阅读字符串,这将匹配任何内容直到第一条注释,将第一条内容的内容放入组1,然后匹配任何内容直到行末或下一条注释。

@Bohemian我已经阅读了它-因此我的第一句话,但我处理的是一个非常特殊的情况——找到所有后面有
的文本。它不是真正的解析,而是字符串匹配。如果问题是“把所有东西都放在括号里”,没有人会眨眼…@Gordon——一个不错的选择。我试了一下,效果很好。是的,请解释一下。谢谢,我来试一试。@Basiclife,不客气。还可以通过一个小的演示来查看编辑。标签上的标记很好,但这实际上是在PHP中使用的-
preg_replace((?!-->)(/(?)((?!@Basiclife,当然,请参见编辑II以获取PHP演示。谢谢Bart,这很有效-不确定为什么我的没有,但我会花一些时间挖掘
(?s)              # enable DOT-ALL
((?!-->).)*<!--   # match anything except '-->' ending with '<!--'
|                 # OR
-->((?!<!--).)*   # match '-->' followed by anything except '<!--'
s/-->.*?<--//g strips off anything between "-->" and the next "<--"

s/^.*?<--// strips off from the beginning to the first occurence of "<--"

s/-->.*?$// strips off from the last occurence of "-->" to the end
.*?<!--(.*?)-->.*?(?=<!--|$)
$1