PHP Regex获取页面上的所有图像URL

时间:2013-08-07 03:11:03

标签: php regex

奇怪的是,我还没有找到任何具体回答这个问题的地方,我发现的所有其他堆栈溢出的东西都不完全正确。

我有一个正文,我需要搜索图片网址,这并不意味着任何复杂但基本上是这样的:

  

http://www.google.com/logo.png

     

http://reddit.com/idfaiodf/test.jpg

不是

  

http://reddit.com/sadfasdf/test.jpgMORECONTENTHERE

我使用过的所有正则表达式都包括" MORECONTENTHERE"在结果中。这太令人沮丧了。我只想要之前没有附加任何内容的URL或之前添加的内容!

此外,我不想要任何提取HTML图片链接的内容 - 我不会从HTML中提取这些内容。

任何正则表达式都可以吗?

编辑:

以下是我作为来源使用的内容:http://pastebin.com/dE2s1nHz

它的HTML,但我不想提及,因为我不希望别人这样做

4 个答案:

答案 0 :(得分:7)

https?://[^/\s]+/\S+\.(jpg|png|gif)
  1. https?是“http”或“https”
  2. ://是字面意思
  3. [^/\s]+不是“/”或空格
  4. /是字面意思
  5. \S+不是空格
  6. \.是“。”
  7. (jpg | png | gif)是图片扩展名,由|
  8. 分隔

    结果:

    enter image description here

    以上摘自RegexBuddy,用于Mac上的Wine。 “PCRE”相当于preg_*个函数。表达式应该适用于大多数正则表达式。

答案 1 :(得分:4)

匹配以已知图像扩展名结尾的字符串。

<?php

    $string = "Oddly enough I haven't found anywhere that has answer this question specificly, all the other stack overflow things I've found aren't exactly right.

    I have a body text I need to search through for image urls, this doesn't mean anything complex but basically things like:

        http://www.google.com/logo.png

        http://reddit.com/idfaiodf/test.jpg

    NOT

        http://reddit.com/sadfasdf/test.jpgMORECONTENTHERE
    ";

    $pattern = '~(http.*\.)(jpe?g|png|[tg]iff?|svg)~i';

    $m = preg_match_all($pattern,$string,$matches);

    print_r($matches[0]);

?>

<强>输出

Array
(
    [0] => http://www.google.com/logo.png
    [1] => http://reddit.com/idfaiodf/test.jpg
    [2] => http://reddit.com/sadfasdf/test.jpg
)

答案 2 :(得分:2)

请尝试以下代码:

$text = <<< EOD
http://www.google.com/logo.png
http://reddit.com/sadfasdf/test.jpgMORECONTENTHERE
http://reddit.com/idfaiodf/test.jpg
EOD;

preg_match_all('/\bhttps?:\/\/\S+(?:png|jpg)\b/', $text, $matches);
var_dump($matches[0]);

答案 3 :(得分:0)

https?://[a-zA-Z0-9.]/[a-zA-Z0-9-&.]+\.(jpg|png|gif|tif|exf|svg|wfm)

我选择了一些任意图像类型,并且可能错过了URL中允许的几个特殊字符。随意根据您的需求进行定制。