【发布时间】:2018-11-12 00:33:40
【问题描述】:
我需要使用 PHP 从 HTML 页面捕获特定标签。
一个 HTML 文档可以有多个结果(多行也是如此)。如果标签包含data-uid 值,也只需要匹配标签。
- 标签名称(div、span 等...)
- data-uid 的值
- 子节点。
到目前为止,我能够捕获标签名称、data-uid 的值。但不是儿童节点。
<div class="testClassOne" data-uid="123456">
<div class="testClassTwo">Content</div>
<-- More nodes -->
</div>
结果:{标签:“div”,data-uid:123456,孩子:“<div class="testClassTwo">Content</div>”}
或
<div class="testClassOne" data-uid="123456"></div>
结果:{标签:“div”,data-uid:123456,孩子:“”}
我目前的正则表达式和函数如下...
$regex = '/<(.*) (?:.*?)data-uid="([^"]*?)"(?:.*?)>(.*?)<\/\1>/';
$content = preg_replace_callback($regex, 'test', $content);
function test($arg){
print_r($arg);
}
有谁知道解决这个问题(也将孩子作为字符串捕获?)?
【问题讨论】:
-
你会远远更好地使用 DOM 解析来做到这一点;将正则表达式用于此类任务会变得复杂,并且最终会变得相当脆弱
-
@landru27 我也尝试使用 DOMDocument 来执行此操作。但是失败了,还没有达到这一步。有什么建议可以有效地捕获 tagName、data-uid 以及孩子吗?
-
@stackminu :如果您已经对 DOM 解析进行了充分研究、尝试并失败了,那么您最好发布一个 SO 问题,详细说明您的 DOM 解析中哪些问题,而不是放弃,切换到正则表达式,在那里也失败了,并向 SO 发布您的正则表达式尝试;换句话说,回到 DOM 解析;未来你会非常感谢你