使用preg_match_all提取网页上的所有图像链接

时间:2014-02-18 00:36:35

标签: php regex image preg-match-all

我在preg_match_all函数中遇到这种模式 - “/([a-z-_0-9/\:.]*.(jpg| jpeg | png))/ i” - 有点麻烦。不可否认,我的正则表达式有点弱,所以我怀疑其中有问题。

这就是我现在所拥有的 -

preg_match_all("/([a-z\-_0-9\/\:\.]*\.(jpg|jpeg|png))/i", $raw, $matching)

$ raw只是这个页面的HTML - http://www.topshop.com/webapp/wcs/stores/servlet/ProductDisplay?beginIndex=0&viewAllFlag=&catalogId=33057&storeId=12556&productId=13936776&langId=-1&categoryId=&parent_category_rn=&searchTerm=TS05K01FBLC&resultCount=1&geoip=home

页面上有一堆图像没有被拉入,我得到的是以下内容($匹配数组的[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 - 即使它在页面上

非常感谢任何帮助。

格雷格

1 个答案:

答案 0 :(得分:0)

我使用了这个,当MElliott把你从你那里得到的评论放在页面上时,也从页面上得到了25张图片。

preg_match_all('/([-a-z0-9_\/:.]+\.(jpg|jpeg|png))/i', $raw, $matches);

print "<pre>"; print_r($matches[0]); print "</pre>";

我唯一提到的是你不需要转义字符类中的所有字符 - 只有正斜杠,因为它是你正在使用的分隔符。此外,您应在字符类后使用加号+而不是星号*,以确保图像名称中至少包含一个字符。