6

我需要一个用于 PHP 的函数或正则表达式字符串,我可以像这样传递一个字符串:

Lorem ipsum dolor sit amet,http ://www.gettyimages.com/images/marketing/frontdoorStill/PanoramicImagesRM/FD_image.jpg consectetur adipiscing elit。Nullam sed diam lectus,一个 rutrum orci。暂停潜力。Nulla facilisi。暂停潜力。Ut http://www.handsonuniverse.org/get_images/images/20090802.ngc6992.HOS.jpg ullamcorper mauris sit amet elit tristique sat amet laoreet nunc condimentum。Lorem ipsum dolor sit amet, consectetur adipiscing elit。Aliquam euismod arcu non odio http://www.prelovac.com/vladimir/wp-content/uploads/2008/03/example.jpg aliquam vestibulum。Sed eleifend Tellus id augue luctus ac ultrices leo semper。

我会得到回报:

http://www.gettyimages.com/images/marketing/frontdoorStill/PanoramicImagesRM/FD_image.jpg http://www.handsonuniverse.org/get_images/images/20090802.ngc6992.HOS.jpg http://www.prelovac。 com/vladimir/wp-content/uploads/2008/03/example.jpg

在一个数组中。我需要它来根据天气抓取 URL,它们是否包含常规图像扩展名,例如 *.jpg、*.png、*.bmp 等。任何人都知道存在这样的 URL,这样我就可以避免重新发明轮子?谢谢!

4

3 回答 3

6

好吧,下面将适用于您的示例:

preg_match_all('/(https?:\/\/\S+\.(?:jpg|png|gif))\s+/', $content, $matches);

添加您想要捕获的任何其他扩展。

请注意,上述内容不一定是稳健的(www.blah.com/image.jpg例如,它不匹配)。它也不会匹配没有以扩展名结尾的 URL,即使它们是图像(即,http://domain.com/blah.jpg?loadsmall=true或其他东西)。有一些方法可以让它更智能,但这真的取决于你期望什么样的输入,因为这会驱动你的解析需要多么复杂。

于 2012-08-03T06:00:10.770 回答
5

如果您不想使用正则表达式执行此操作。相反,解析 HTML。

<?php
$html='YOUR_STRING';
$dom = new domDocument; 
$dom->loadHTML($html); 
$dom->preserveWhiteSpace = false;
$images = $dom->getElementsByTagName('img');

foreach ($images as $image) 
   {   
     echo $image->getAttribute('src'); 
   }

?>
于 2014-01-03T06:12:27.400 回答
1

这是正则表达式: /(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/g

演示:http ://regexr.com?31ni5

积分用于一些随机的 Google 结果。

于 2012-08-03T06:03:24.870 回答