PHP-PHP正则正确抓取图片路径问题

发布于 2016-12-20 06:16:27 字数 167 浏览 1345 评论 2

直接抓取网页上的图,有张图是这样的

<img src="http://www.php100.com/uploadfile/2013/0912/20130912105814443.png" alt="">

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清晨说ぺ晚安 2017-03-22 04:18:48

使用明确的字符做界定,而避免使用.(任意字符)

 <?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);

灵芸 2017-02-19 14:34:24

用你的图片里的数据和你给出的正则:

 $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'

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文