PHP-PHP正则正确抓取图片路径问题
直接抓取网页上的图,有张图是这样的
<img src="http://www.php100.com/uploadfile/2013/0912/20130912105814443.png" alt="">
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
直接抓取网页上的图,有张图是这样的
<img src="http://www.php100.com/uploadfile/2013/0912/20130912105814443.png" alt="">
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
使用明确的字符做界定,而避免使用.(任意字符)
<?php
$str = <<<EOF
<img src="http://www.php100.com/uploadfile/2013/0912/20130912105814443.png" alt="">
<img src="http://www.php100.com/uploadfile/2013/0912/20130912105814443.png" alt="1">
EOF;
preg_match_all('/<img[^>]+?src="([^"]+)"[^>]+>/Ui', $str, $matches);
var_dump($matches);
用你的图片里的数据和你给出的正则:
$str= '<img alt="" src="test1.png"/></p><p><img alt="" src="test2.png" />';
preg_match_all('/<imgs+.*src="(.*)"s+.*/>/Ui', $str, $matches);
匹配出来确实是
"test1.png"/></p><p><img alt="\"
究其原因, 你在正则里用了不必要的空白匹配 (注意你正则里的第二个 s+), 对应到数据, 就知道src="test1.png"/>, 在src="test1.png"后面是没有空格的.
最后说一下, 你的正则里的问题:
1). 很多地方是不需要escape的, <, =, ", >这些在正则里都不是关键字;
2). 注意看一下, 你的两个 空白匹配, 确实需要么? (后面都跟了 .*)
给出改后的正则:
'/<img.*src="(.*)".*/>/Ui'