PHP正则表达式获取页面上的所有图像URL
奇怪的是,我还没有找到任何地方能具体回答这个问题,我发现的所有其他堆栈溢出的东西都不完全正确 我有一个正文,我需要搜索图像URL,这并不意味着什么复杂的事情,但基本上是这样的: 不是 我使用的所有正则表达式都会在结果中包含“MORECONTENTHERE”。这真令人沮丧。我只是想与任何附加后或之前添加的网址 此外,我不想做任何HTML图像链接提取-我不是从HTML拉这些 有正则表达式可以这样做吗 编辑: 以下是我用作来源的内容: 这是HTML,但我不想提及,因为我不想让人们这么做PHP正则表达式获取页面上的所有图像URL,php,regex,Php,Regex,奇怪的是,我还没有找到任何地方能具体回答这个问题,我发现的所有其他堆栈溢出的东西都不完全正确 我有一个正文,我需要搜索图像URL,这并不意味着什么复杂的事情,但基本上是这样的: 不是 我使用的所有正则表达式都会在结果中包含“MORECONTENTHERE”。这真令人沮丧。我只是想与任何附加后或之前添加的网址 此外,我不想做任何HTML图像链接提取-我不是从HTML拉这些 有正则表达式可以这样做吗 编辑: 以下是我用作来源的内容: 这是HTML,但我不想提及,因为我不想让人们这么做 http
https?://[a-zA-Z0-9.]/[a-zA-Z0-9-&.]+\.(jpg|png|gif|tif|exf|svg|wfm)
我选择了一些任意的图像类型,可能遗漏了URL中允许的几个特殊字符。您可以根据自己的需要进行定制。尝试以下代码:
$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]);
$text=匹配以已知图像扩展名结尾的字符串
<?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]);
?>
https?
是“http”还是“https”
://
是文本
[^/\s]+
不是“/”或空格
/
是文本
\S+
绝对不是空格
\。
是“
(jpg | png | gif)是图像扩展,由
结果:
以上内容摘自RegexBuddy,用于Mac上的葡萄酒。“PCRE”相当于preg.*
函数。表达式应该适用于大多数正则表达式风格。如果您不是从HTML中获取它们,请发布一个示例,说明从何处获取它们。如果没有这一点,将很难避免捕获第三个示例,或者不捕获前两个示例。好的,现在添加一个示例我认为可能会丢失不在根目录中的图像。和带有破折号的域。问题是它将匹配图像之前的任何URL,包括图像URL。尝试将链接放在图像之前,匹配将扩展到封装两者。如果您没有转义文本,则不需要转义/
,除非您在PHP的preg.*
函数中将其用作分隔符。看见分隔符不是表达式的一部分,因此将忽略它们。将/
视为分隔符是很常见的,但是如果在模式中使用/
,通常最好避免将其用作分隔符而不是转义它。
Array
(
[0] => http://www.google.com/logo.png
[1] => http://reddit.com/idfaiodf/test.jpg
[2] => http://reddit.com/sadfasdf/test.jpg
)
https?://[^/\s]+/\S+\.(jpg|png|gif)