php正则表达式可选地匹配整个单词

即时通讯使用
PHP,我需要从网站的一些卷曲响应中抓取一些信息.我正在模拟浏览器的ajax请求和浏览器的正常(整个)页面请求,但是ajax响应与html的这一部分中的整个页面请求略有不同.

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”>标签还是?如果为了简洁起见,它有助于简化干草堆,这很好.

最佳答案 我没有测试过,但你可以尝试这个:

    $pattern = '/\<div id="accountProfile"\>(\<html xmlns=\"http://www.w3.org/1999/xhtml\"\>){0,1}\<h2\>(.+?)\<\/h2\>\<dl id="accountProfileData"\>/';
点赞