即时通讯使用PHP,我需要从网站的一些卷曲响应中抓取一些信息。我正在模拟浏览器的ajax请求和浏览器的正常(整个)页面请求,但是ajax响应与html的这一部分中的整个页面请求略有不同。
ajax响应是:
<div id="accountProfile"><h2>THIS IS THE BIT I WANT</h2><dl id="accountProfileData">
然而,正常的反应是:
<div id="accountProfile"><html xmlns="http://www.w3.org/1999/xhtml"><h2>THIS IS THE BIT I WANT</h2><dl id="accountProfileData">
即ajax响应缺少标记:<html xmlns="http://www.w3.org/1999/xhtml">
。我需要获取h2
标签之间的位。显然我不能只抓取<h2>THIS IS THE BIT I WANT</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">
标签吗?如果为了简洁起见,它有助于简化干草堆,那很好。
答案 0 :(得分:2)
我没有测试过,但你可以尝试一下:
$pattern = '/\<div id="accountProfile"\>(\<html xmlns=\"http://www.w3.org/1999/xhtml\"\>){0,1}\<h2\>(.+?)\<\/h2\>\<dl id="accountProfileData"\>/';