【发布时间】:2014-03-17 12:26:45
【问题描述】:
我在 preg_match_all 函数中遇到了这种模式 - "/([a-z-_0-9/\:.]*.(jpg|jpeg|png))/i" 的问题。诚然,我的正则表达式有点弱,所以我怀疑里面有问题。
这是我目前拥有的 -
preg_match_all("/([a-z\-_0-9\/\:\.]*\.(jpg|jpeg|png))/i", $raw, $matching)
页面上有一堆图像没有被拉入,我得到的只是以下($matching 数组的 [0] - 其余的是不同格式的重复数据)
array(8) {
[0]=>
string(77) "http://media.topshop.com/wcsstore/TopShop/images/catalog/05K01FBLC_normal.jpg"
[1]=>
string(143) "/wcsstore/ConsumerDirectStorefrontAssetStore/images/colors/color7/cms/pages/static/static-0000067510/images/tact-wk24-LFWshipping_UK-ROW-EU.jpg"
[2]=>
string(76) "http://media.topshop.com/wcsstore/TopShop/images/catalog/05K01FBLC_large.jpg"
[3]=>
string(77) "http://media.topshop.com/wcsstore/TopShop/images/catalog/05K01FBLC_normal.jpg"
[4]=>
string(40) "//assets.pinterest.com/images/PinExt.png"
[5]=>
string(41) "http://platform.tumblr.com/v1/share_4.png"
[6]=>
string(163) "http://media.topshop.com/wcsstore/ConsumerDirectStorefrontAssetStore/images/colors/color7/cms/pages/static/static-0000067528/images/PDP-wk24-LFWshipping_ROW-EU.jpg"
[7]=>
string(119) "/wcsstore/ConsumerDirectStorefrontAssetStore/images/colors/color7/cms/pages/static/static-0000008560/images/onthego.png"
}
如果有人能告诉我一些信息,为什么这不是拉入页面上的每张图片,而只是这 8 张图片?
正则表达式中有什么东西限制了我得到的东西吗?
我没有收到这个 jpg 链接 - http://media.topshop.com/wcsstore/TopShop/images/catalog/05K01FBLC_3_large.jpg - 即使它在页面上
任何帮助将不胜感激。
格雷格
【问题讨论】:
-
正则表达式是解析html的不好方法,尝试使用
DOMDocument代替-> stackoverflow.com/questions/15895773/… -
该 jpg 不再出现在页面上。我得到了 25 张带有下一个正则表达式的图像:
preg_match_all("/(?<='|\")[^'\"]+(jpg|jpeg|png)(?='|\"|\?)/i", $raw, $matching);gif 是否出于目的而跳过? -
Your regex is fine mostly — 基本上归结为 Crisp 提到的内容。
-
是的,您的正则表达式似乎正在工作。它会拾取 25 张图像,如果添加 .gif,它会拾取 36 张图像。
-
大家好,我故意跳过 Gif - 只是因为相关图像是 jpg。那么也许 preg_match_all 没有拉入正确的数量。我将查看 DOMDocument - 但这不只是让您找到查找 IMG 标记吗?我想要所有指向提到的图像扩展名的 URL。谢谢您的帮助。 :-)
标签: php regex image preg-match-all