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

php正则表达式可以选择匹配整个单词,php,regex,preg-match,Php,Regex,Preg Match,我正在使用php,我需要从一些对站点的curl响应中获取一些信息。我模拟了浏览器的ajax请求和浏览器的正常(整个)页面请求,但是ajax响应与html的这一部分中的整个页面请求略有不同 ajax的响应是: 这是我想要的位 然而,正常的反应是: 这是我想要的位 ie ajax响应缺少标记:。我需要获取h2标记之间的位。很明显,我不能只是为了而刮页面,这是我想要的位,因为这些标签可能出现在其他地方,并且不包含我想要的信息 我可以单独匹配其中任何一种模式,但是我希望在单个正则表达式中同时匹配这两种模

我正在使用php,我需要从一些对站点的curl响应中获取一些信息。我模拟了浏览器的ajax请求和浏览器的正常(整个)页面请求,但是ajax响应与html的这一部分中的整个页面请求略有不同

ajax的响应是:
这是我想要的位

然而,正常的反应是:
这是我想要的位

ie ajax响应缺少标记:
。我需要获取
h2
标记之间的位。很明显,我不能只是为了
而刮页面,这是我想要的
位,因为这些标签可能出现在其他地方,并且不包含我想要的信息

我可以单独匹配其中任何一种模式,但是我希望在单个正则表达式中同时匹配这两种模式。下面是我匹配ajax响应的解决方案:

<?php
$pattern = '/\<div id="accountProfile"\>\<h2\>(.+?)\<\/h2\>\<dl id="accountProfileData"\>/';
preg_match($pattern, $haystack, $matches);
print_r($matches);
?>


有人能告诉我应该如何更改模式,以选择性地匹配
标记吗?如果它有助于简化干草堆以达到简洁的目的,那就好了。

我还没有测试过它,但您可以尝试以下方法:

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

正常响应被破坏-文档中没有
html
元素。我不完全确定你的问题是什么?您是否考虑过使用DOM解析器来解析HTML?看,它可能坏了,但它仍然在那里。我没有写我正在刮的网站。好的,我更新了一些有效的需求-只要您在
xmlns=\”中转义所有内容http://www.w3.org/1999/xhtml
:)您还可以简化
{0,1}
我想知道是否可以在
html xmlns=…
标记周围不加括号地编写模式?这没什么大不了的,但是php的preg_match为括号中与模式匹配的任何内容创建了一个新的数组元素。当然,我可以只使用最后的
$matches
数组元素,但我很好奇是否可以这样做避免匹配此不需要的
html xmlns=…
标记模式。@Mullhausen:您可以通过在非捕获组的开头添加
?:
来使用该组,因此:
(?:\