php正则提取img标签属性值的二种方法

发布时间:2020-02-09编辑:脚本学堂
分享下php用正则提取img标签中各属性值的方法,提供二种方法,从不同的图片中提取属性值,需要的朋友参考下。

例子:
 

<?php 
$ext = 'gif|jpg|jpeg|bmp|png';//罗列图片后缀从而实现多扩展名匹配
$str = '<p><img title="乐读斋" alt="乐读斋" onload="ResizeImage(this,860)" src="http://www.leduz.com/uploadfile/2011/0910/20110910102454887.jpg" /></p><p><img title="乐读斋" alt="乐读斋" onload="ResizeImage(this,860)" src="http://www.leduz.com/uploadfile/2011/0910/20110910102455105.jpg" /></p><p><img title="乐读斋" alt="乐读斋" onload="ResizeImage(this,860)" src="http://www.leduz.com/uploadfile/2011/0910/20110910102459367.jpg" /></p>'; 
 
$list = array();    //这里存放结果map 
$c1 = preg_match_all('/<imgs.*?>/', $str, $m1);  //先取出所有img标签文本 
for($i=0; $i<$c1; $i++) {    //对所有的img标签进行取属性 
    $c2 = preg_match_all('/(w+)s*=s*(?:(?:(["'])(.*?)(?=2))|([^/s]*))/', $m1[0][$i], $m2);   //匹配出所有的属性 
    for($j=0; $j<$c2; $j++) {    //将匹配完的结果进行结构重组 
        $list[$i][$m2[1][$j]] = !empty($m2[4][$j]) ? $m2[4][$j] : $m2[3][$j]; 
    } 

print_r($list); //查看结果变量 
 
?> 

输出结果:
---------- php ---------- 
Array 

    [0] => Array 
        ( 
            [title] => 乐读斋 
            [alt] => 乐读斋 
            [onload] => ResizeImage(this,860) 
            [src] => http://www.leduz.com/uploadfile/2011/0910/20110910102454887.jpg 
        ) 
 
    [1] => Array 
        ( 
            [title] => 乐读斋 
            [alt] => 乐读斋 
            [onload] => ResizeImage(this,860) 
            [src] => http://www.leduz.com/uploadfile/2011/0910/20110910102455105.jpg 
        ) 
 
    [2] => Array 
        ( 
            [title] => 乐读斋 
            [alt] => 乐读斋 
            [onload] => ResizeImage(this,860) 
            [src] => http://www.leduz.com/uploadfile/2011/0910/20110910102459367.jpg 
        ) 
 

 
输出完毕 (耗时 0 秒) - 正常终止 

另一种写法,充分证明此正则方法可以完美匹配img标签的各属性:
 

<?php 
$str = <<<EOT 
<img src = "http://www.leduz.com/uploadfile/2011/0910/20110910100916470.jpg" class ='image x1' alt="乐读斋" shuxing =shux /> 
<img src = "http://www.leduz.com/uploadfile/2011/0910/20110910100916803.jpg" class ='image x2' alt='乐读斋' title=abc shuxing =shux /> 
这里是乐读斋 http://www.leduz.com 
<a href="http://www.leduz.com/" class="a" alt=abc shuxing="shux" />只取得img标签 
EOT; 
 
$list = array();    //这里存放结果map 
$c1 = preg_match_all('/<imgs.*?>/', $str, $m1);  //先取出所有img标签文本 
for($i=0; $i<$c1; $i++) {    //对所有的img标签进行取属性 
    $c2 = preg_match_all('/(w+)s*=s*(?:(?:(["'])(.*?)(?=2))|([^/s]*))/', $m1[0][$i], $m2);   //匹配出所有的属性 
    for($j=0; $j<$c2; $j++) {    //将匹配完的结果进行结构重组 
        $list[$i][$m2[1][$j]] = !empty($m2[4][$j]) ? $m2[4][$j] : $m2[3][$j]; 
    } 

print_r($list); //查看结果变量 
 
?> 

输出结果:
---------- php ---------- 
Array 

    [0] => Array 
        ( 
            [src] => http://www.leduz.com/uploadfile/2011/0910/20110910100916470.jpg 
            [class] => image x1 
            [alt] => 乐读斋 
            [shuxing] => shux 
        ) 
 
    [1] => Array 
        ( 
            [src] => http://www.leduz.com/uploadfile/2011/0910/20110910100916803.jpg 
            [class] => image x2 
            [alt] => 乐读斋 
            [title] => abc 
            [shuxing] => shux 
        ) 
 

输出完毕 (耗时 0 秒) - 正常终止