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

时间:2011-05-10 07:36:36

标签: php regex preg-match

即时通讯使用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">标签吗?如果为了简洁起见,它有助于简化干草堆,那很好。

1 个答案:

答案 0 :(得分:2)

我没有测试过,但你可以尝试一下:

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