2

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

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

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

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

不是

http://reddit.com/sadfasdf/test.jpg更多内容

我使用的所有正则表达式都将在结果中包含“更多内容”。真是令人沮丧。我只希望 URL 之后没有附加任何内容或之前添加任何内容!

此外,我不想要任何可以提取 HTML 图像链接的东西——我不会从 HTML 中提取这些内容。

任何正则表达式来做到这一点?

编辑:

所以这是我用作来源的内容:http: //pastebin.com/dE2s1nHz

它是 HTML,但我不想提及,因为我不想让人们这样做

4

4 回答 4

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

结果:

在此处输入图像描述

以上取自 RegexBuddy,用于 Mac 上的 Wine。“PCRE”等价于preg_*函数。表达式应该适用于大多数正则表达式风格。

于 2013-08-07T04:41:29.043 回答
4

This matches a string ending with a known image extension.

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

?>

Output

Array
(
    [0] => http://www.google.com/logo.png
    [1] => http://reddit.com/idfaiodf/test.jpg
    [2] => http://reddit.com/sadfasdf/test.jpg
)
于 2013-08-07T03:45:40.957 回答
3

试试下面的代码:

$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]);
于 2013-08-07T03:20:24.687 回答
0
https?://[a-zA-Z0-9.]/[a-zA-Z0-9-&.]+\.(jpg|png|gif|tif|exf|svg|wfm)

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

于 2013-08-07T03:15:37.420 回答