我正在尝试匹配一个段落:
<p>content</p>
一个简单的<p>(.*?)</p>
有效,但有时该段落里面包含另一个段落,因此我的模式在第一段结束后匹配,而不是直到第二段。
导致我出现此问题的段落如下所示:
<p><p><b>something</b></p>content</p>
如何匹配主段落,忽略该段落内的任何其他p标签?
我试过
<p>(.*?)(?<!</b>)</p>
但它不起作用。
我正在使用preg_match_all php函数。
答案 0 :(得分:3)
正则表达式对于解析嵌套标记非常糟糕。这就是你使用dom或xml解析器的原因。
答案 1 :(得分:0)
当我需要处理这样的情况时,我创建了一个递归函数 findClosingTag ,用于查找下一个结束标记的索引(例如</p>
)。如果在该索引之前还有另一个开始标记(例如<p>
),那么我会递归并查找该嵌套开始标记的关闭。继续,直到到达原始标记的末尾。也许不是最有效的,但可能比解析完整的DOM更好,如果你不需要它。
我现在没有片段,但它非常简单。