奇怪的是,我还没有找到任何具体回答这个问题的地方,我发现的所有其他堆栈溢出的东西都不完全正确。
我有一个正文,我需要搜索图片网址,这并不意味着任何复杂但基本上是这样的:
不是
我使用过的所有正则表达式都包括" MORECONTENTHERE"在结果中。这太令人沮丧了。我只想要之前没有附加任何内容的URL或之前添加的内容!
此外,我不想要任何提取HTML图片链接的内容 - 我不会从HTML中提取这些内容。
任何正则表达式都可以吗?
编辑:
以下是我作为来源使用的内容:http://pastebin.com/dE2s1nHz
它的HTML,但我不想提及,因为我不希望别人这样做
答案 0 :(得分:7)
https?://[^/\s]+/\S+\.(jpg|png|gif)
https?
是“http”或“https”://
是字面意思[^/\s]+
不是“/”或空格/
是字面意思\S+
不是空格\.
是“。”|
结果:
以上摘自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中允许的几个特殊字符。随意根据您的需求进行定制。