尝试匹配HTML <img/>标记正则表达式的src部分

时间:2014-05-08 18:40:29

标签: regex html-parsing

我已经从HTML文件中分离了一堆字符串,例如:

<img alt="" src="//i.imgur.com/tApg8ebb.jpg" title="Some manly skills for you guys&lt;p&gt;&lt;span class='points-q7Vdm'&gt;18,736&lt;/span&gt;&nbsp;&lt;span class='points-text-q7Vdm'&gt;points&lt;/span&gt;  : 316,091 views&lt;/p&gt;">

<img src="//i.imgur.com/SwmwL4Gb.jpg" width="48" height="48">

<img src="//s.imgur.com/images/blog_rss.png">

我正在尝试创建一个正则表达式,它将获取img标记的 src =“ URL 部分,以便我稍后可以基于一些替换它其他条件。很多引号都给了我最大的问题,我对Regex来说还是比较新的,所以很多技巧都是我不知道的,

提前致谢

2 个答案:

答案 0 :(得分:2)

使用DOM或其他解析器,不要尝试使用正则表达式解析HTML。

示例:

$html = <<<DATA
<img alt="" src="//i.imgur.com/tApg8ebb.jpg" title="Some manly skills for you guys&lt;p&gt;&lt;span class='points-q7Vdm'&gt;18,736&lt;/span&gt;&nbsp;&lt;span class='points-text-q7Vdm'&gt;points&lt;/span&gt;  : 316,091 views&lt;/p&gt;">
<img src="//i.imgur.com/SwmwL4Gb.jpg" width="48" height="48">
<img src="//s.imgur.com/images/blog_rss.png">
DATA;

$doc = new DOMDocument();
$doc->loadHTML($html); // load the html

$xpath = new DOMXPath($doc);
$imgs  = $xpath->query('//img');

foreach ($imgs as $img) {
   echo $img->getAttribute('src') . "\n";
}

输出

//i.imgur.com/tApg8ebb.jpg
//i.imgur.com/SwmwL4Gb.jpg
//s.imgur.com/images/blog_rss.png

如果您希望将结果存储在数组中,则可以执行..

foreach ($imgs as $img) {
   $sources[] = $img->getAttribute('src');
}

print_r($sources);

输出

Array
(
    [0] => //i.imgur.com/tApg8ebb.jpg
    [1] => //i.imgur.com/SwmwL4Gb.jpg
    [2] => //s.imgur.com/images/blog_rss.png
 )

答案 1 :(得分:-1)

$pattern = '/<img.+src="([\w/\._\-]+)"/';

我不确定您使用的是哪种语言,因此引用语法会有所不同。