我正在使用PHP,需要从一些CURL响应中抓取信息。我模拟了浏览器的ajax请求和普通(整个)页面请求,但是在HTML的这个部分中,ajax响应与整个页面请求稍有不同。
ajax响应如下:
<div id="accountProfile"><h2>我想要的部分</h2><dl id="accountProfileData">
然而,正常响应为:
<div id="accountProfile"><html xmlns="http://www.w3.org/1999/xhtml"><h2>我想要的部分</h2><dl id="accountProfileData">
即ajax响应中缺少标签:<html xmlns="http://www.w3.org/1999/xhtml">
。我需要获取h2
标签之间的内容。显然,我不能只从页面中抓取<h2>我想要的部分</h2><dl id="accountProfileData">
,因为这些标签可能出现在其他地方,并且不包含我想要的信息。
我可以单独匹配其中一个模式,但我希望在单个正则表达式中同时匹配两个模式。以下是我的解决方案,用于匹配ajax响应:
<?php
$pattern = '/\<div id="accountProfile"\>\<h2\>(.+?)\<\/h2\>\<dl id="accountProfileData"\>/';
preg_match($pattern, $haystack, $matches);
print_r($matches);
?>
有人能向我展示如何修改模式,以便可选择地匹配<html xmlns="http://www.w3.org/1999/xhtml">
标签吗?如果为了简洁起见需要简化干草堆,那就没问题。
html
元素在文档中没有位置。我不太确定你的问题是什么?你考虑过使用 DOM 解析器来解析 HTML 吗?请参阅 解析 HTML 的最佳方法。 - Pekka