我对正则表达式真的很不好。它还没有点击。我正在尝试制作一个小应用程序来提取其src,width和height属性的所有图像标记。这就是我到目前为止所做的:
<?php
function print_links ($url)
{
$fp = fopen($url, "r") or die("Could not contact $url");
$page_contents = "";
while ($new_text = fread($fp, 100)) {
$page_contents .= $new_text;
}
$match_result =
preg_match_all( '/<img.*src=[\"\'](.*)[\"\'].*width=(\d+).*height=(\d+).*/>/i',
$page_contents,
$match_array,
PREG_SET_ORDER);
echo "number matched is: $match_result<br><br> ";
print_r($match_array);
foreach ($match_array as $entry) {
$tag = $entry[0];
$src = $entry[1];
$width = $entry[2];
$height = $entry[3];
print (" <b>src</b>: $src;
<b>width</b>: $width<br />
<b>height</b>: $height<br />
<b>tag</b>: $tag<br />"
);
}
}
print_links ("http://www.drudgereport.com/");
?>
但我得到了这个小错误:
警告:preg_match_all():未知修饰符'&gt;'在第17行匹配的C:\ Apache2.2 \ htdocs \ it302 \ regex \ regex.php中:
我不确定我的正则表达式出错了。我尝试了很多东西,但最终却感到很困惑。
有什么建议吗?
答案 0 :(得分:2)
在你的正则表达式中,最后一个.*/>
是错误的。
没有/
那里......
/<img.*src=[\"\'](.*)[\"\'].*width=(\d+).*height=(\d+).*>/i
或\/?
转义并将其设为可选...
/<img.*src=[\"\'](.*)[\"\'].*width=(\d+).*height=(\d+).*\/?>/i
但是这个正则表达式只有在src宽度高度在img标签内的给定顺序时才有效,宽度和高度也允许引用的值和单位。例如width =“0.9em”是有效的html ...
这就是为什么你不应该使用正则表达式来解析html(还有更多......)
答案 1 :(得分:1)
不要使用正则表达式。特别是如果你真的很糟糕:))
http://simplehtmldom.sourceforge.net/
foreach($html->find('img') as $element){
$src = $element->src;
$width = $element->width;
$height = $element->height;
print (" <b>src</b>: $src;
<b>width</b>: $width<br />
<b>height</b>: $height<br />
<b>tag</b>: $tag<br />"
);
}