我希望使用Php.Can检索<table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#EBEBEB">
和</table>
之间的数据。请指定正确的正则表达式,以便在给定的表格标签之间检索数据
答案 0 :(得分:2)
我相信你需要的是XPath而不是正则表达式。
答案 1 :(得分:1)
这取决于你要检索的内容。我自己不是PHP专业人士,但是我会这样做:
<?php
$contents = file_get_contents($_SERVER['PHP_SELF']);
$array = explode("<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#EBEBEB\">", $contents);
$newarray = explode("</table>", $array[1]);
$yourdata = $newarray[0];
?>
如果您不介意在那里使用其他原始HTML,则应该使用此方法。否则,其他人可能会有更好的解决方案。
答案 2 :(得分:1)
虽然正则表达式可以适用于各种各样的任务,但我发现解析HTML DOM时通常会遇到这种情况。 HTML的问题在于,文档的结构变化很大,难以准确(并且准确地说,我的意思是100%的成功率,没有误报)提取标签。
我建议您使用DOM解析器,例如phpQuery
,并将其用作以下内容:
function get_first_image($html){
$dom = phpQuery::newDocument($html);
$first_img = $dom->find('img:first');
if($first_img !== null) {
return $first_img->attr('src');
}
return null;
}
有些人可能认为这样做有点过分,但最终,维护起来会更容易,并且还可以提供更多的可扩展性。例如,使用DOM解析器,我也可以获得alt属性。
可以设计一个正则表达式来实现相同的目标但是会限制它会强制alt
属性位于src
之后或相反的目标,并克服此限制会增加正则表达式的复杂性。
另外,请考虑以下内容。要使用正则表达式正确匹配<img>
标记并仅获取src
属性(在第2组中捕获),您需要以下正则表达式:
<\s*?img\s+[^>]*?\s*src\s*=\s*(["'])((\\?+.)*?)\1[^>]*?>
然后,如果出现以上情况,则上述情况可能会失败:
i
修饰符。src
属性周围没有使用引号。src
的另一个属性在其值的某处使用>
字符。所以再一次,不要使用正则表达式来解析dom文档。