【发布时间】:2013-08-18 15:22:07
【问题描述】:
我想在<pre> 标记中不存在的字符串中查找注释标记,并将它们包装在<pre> 标记中。
似乎没有办法使用 PHP DOM '找到' cmets。
我已经在使用正则表达式进行一些处理,但是我非常不熟悉(尚未掌握或真正理解)正则表达式中的前瞻和后瞻。
例如我可能有以下代码;
<!-- Comment 1 -->
<pre>
<div class="some_html"></div>
<!-- Comment 2 -->
</pre>
我想将评论 1 包含在 <pre> 标记中,但显然不是评论 2,因为它已经位于 <pre> 中。
这通常在 RegEx 中如何完成?
以下是我对负面环视的理解,以及我的尝试,我显然做错了什么!
(?<!<pre>.*?)<!--.*-->(?!.*?</pre>)
【问题讨论】:
-
这些“链接”都没有回答这个问题。我将提出一些我试图使问题更具体的内容。如果可能,我宁愿不使用外部库。
-
您是否直接控制输入的 HTML,这样可以确保没有包含
<pre>的 JavaScript 或 Comments,没有 CDATA 块,也没有嵌套的 cmets 或<pre>块?如果您不能确保这一点,则可能没有使用正则表达式的明智解决方案。如果可以的话,我会尽量给一个=) -
@Joel 正则表达式的问题是,PCRE 不支持可变长度的lookbehinds。因此,虽然您的尝试实际上非常合理(除了一些贪心问题),但它只适用于 .NET。这就是为什么几乎不可能用正则表达式稳健地解决这个问题。