【发布时间】:2011-05-10 07:36:35
【问题描述】:
我正在使用 php,我需要从一些 curl 对网站的响应中抓取一些信息。我正在模拟浏览器的 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"> 标签?如果为了简洁起见有助于简化干草堆,那很好。
【问题讨论】:
-
正常响应被破坏 -
html元素在文档中没有位置。我不完全确定你的问题是什么?您是否考虑过使用 DOM 解析器来解析 HTML?见Best methods to parse HTML -
它可能已经坏了,但它仍然存在。我没有写我正在抓取的网站。好的,我稍微更新了要求
标签: php regex preg-match