0

我正在尝试匹配一个段落:

<p>content</p>

一个简单的<p>(.*?)</p>作品,但有时该段落包含另一个段落,所以我的模式在第一段结束后匹配,直到第二段结束。

导致我出现问题的段落如下所示:

<p><p><b>something</b></p>content</p>

如何匹配主要段落而忽略该段落中的任何其他 p 标签?

我试过

<p>(.*?)(?<!</b>)</p>

但它没有用。

我正在使用 preg_match_all php 函数。

4

2 回答 2

3

正则表达式对于解析嵌套标签很糟糕。这就是您使用 dom 或 xml 解析器的原因。

于 2011-02-06T04:18:33.857 回答
0

当我需要处理这样的情况时,我创建了一个递归函数findClosingTag来查找下一个结束标记的索引(例如</p>)。如果在该索引之前<p>还有另一个开始标记(例如),那么我会递归并查找该嵌套开始标记的接近点。继续直到到达原始标签的末尾。也许不是最有效的,但如果你不需要的话,可能比解析一个完整的 DOM 更好。

我现在没有代码片段,但它非常简单。

于 2011-02-06T04:24:06.423 回答