【发布时间】:2012-01-19 19:04:12
【问题描述】:
我有这个 html 块:
<div>
<p>First, nested paragraph</p>
</div>
<p>First, non-nested paragraph.</p>
<p>Second paragraph.</p>
<p>Last paragraph.</p>
我正在尝试选择该块中的第一个非嵌套段落。我正在使用 PHP(perl 风格)的 preg_match 来查找它,但似乎无法弄清楚如何忽略 div 中包含的 p 标签。
这是我目前所拥有的,但它选择了上面包含的第一段的内容。
/<p>(.+?)<\/p>/is
谢谢!
编辑
不幸的是,我没有 DOM Parser 的奢侈。
我非常感谢不使用 RegEx 解析 HTML 的建议,但这并没有真正帮助我的特定用例。我有一个非常受控的情况,内部应用程序生成结构化文本。如果某些文本匹配某个模式,我正在尝试替换它。这是一个简化的案例,我试图忽略嵌套在其他文本中的文本,而 HTML 是我能想到解释的最简单的案例。我的实际案例看起来有点像这样(但更多的数据和缩小):
#[BILLINGCODE|12345|11|15|2001|15|26|50]#
[ITEM1|{{Escaped Description}}|1|1|4031|NONE|15]
#[{{Additional Details }}]#
[ITEM2|{{Escaped Description}}|3|1|7331|NONE|15]
[ITEM3|{{Escaped Description}}|1|1|9431|NONE|15]
[ITEM4|{{Escaped Description}}|1|1|5131|NONE|15]
我必须将某些行的某一列重新格式化为大量类似的行。帮助我的第一个问题将有助于实际项目。
【问题讨论】:
-
笑话链接一次相关! (请注意,不要重复)
-
我假设您发布的块包含在其他元素中?
-
询问如何使用正则表达式解析 HTML?你会因此被活活吃掉……不过说真的,DOMDocument 会在这里做得更好。
-
嵌套段落总是缩进吗?段落只会跨越一行吗?在那一行上只会有一个段落吗?如果是这样,只需在行首查找开始标签并匹配整行。
/^<p>.+/m如果这还不够,请详细说明您的要求。 -
添加了说明。我有一些非常混乱的数据要挖掘,因此非常感谢非开玩笑的答案。