php正则提取img标签各属性值 _PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > php正则提取img标签各属性值

php正则提取img标签各属性值

 2011/9/29 8:04:49  化蝶自在飞  http://tuzwu.iteye.com  我要评论(0)
  • 摘要:<?php/*createbytuzwu@qq.comforhttp://www.xiaojudeng.com*/$ext='gif|jpg|jpeg|bmp|png';//罗列图片后缀从而实现多扩展名匹配byhttp://www.k686.com绿色软件$str='<p><imgtitle="小桔灯分类信息网"alt="小桔灯分类信息网"onload="ResizeImage(this,860)"src="http://www.xiaojudeng
  • 标签:
<?php
/*
create by tuzwu@qq.com for http://www.xiaojudeng.com
*/
$ext = 'gif|jpg|jpeg|bmp|png';//罗列图片后缀从而实现多扩展名匹配 by http://www.k686.com 绿色软件
$str = '<p><img title="小桔灯分类信息网" alt="小桔灯分类信息网" onload="ResizeImage(this,860)" src="/Upload/Images/2011092908/5174F3A9B936A5C0.jpg" /></p><p><img title="小桔灯分类信息网" alt="小桔灯分类信息网" onload="ResizeImage(this,860)" src="/Upload/Images/2011092908/2D46E9E658BDD4E3.jpg" /></p><p><img title="小桔灯分类信息网" alt="小桔灯分类信息网" onload="ResizeImage(this,860)" src="/Upload/Images/2011092908/FAB3B388CDF62D5C.jpg" /></p>';

$list = array();	//这里存放结果map
$c1 = preg_match_all('/<img\s.*?>/', $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] => /Upload/Images/2011092908/5174F3A9B936A5C0.jpg
        )

    [1] => Array
        (
            [title] => 小桔灯分类信息网
            [alt] => 小桔灯分类信息网
            [onload] => ResizeImage(this,860)
            [src] => /Upload/Images/2011092908/2D46E9E658BDD4E3.jpg
        )

    [2] => Array
        (
            [title] => 小桔灯分类信息网
            [alt] => 小桔灯分类信息网
            [onload] => ResizeImage(this,860)
            [src] => /Upload/Images/2011092908/FAB3B388CDF62D5C.jpg
        )

)

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


下面是另外一个写法的,充分证明此正则方法可以完美匹配img标签的各属性:
<?php
/*
create by tuzwu@qq.com for http://www.xiaojudeng.com
*/

$str = <<<EOT
<img src = "http://www.xiaojudeng.com/uploadfile/2011/0910/20110910100916470.jpg" class ='image x1' alt="小桔灯分类信息网" shuxing =shux />
<img src = "http://www.xiaojudeng.com/uploadfile/2011/0910/20110910100916803.jpg" class ='image x2' alt='小桔灯分类信息网' title=abc shuxing =shux />
这里是小桔灯分类信息网 http://www.xiaojudeng.com
<a href="http://www.xiaojudeng.com/" class="a" alt=abc shuxing="shux" />只取得img标签
EOT;

$list = array();	//这里存放结果map
$c1 = preg_match_all('/<img\s.*?>/', $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.xiaojudeng.com/uploadfile/2011/0910/20110910100916470.jpg
            [class] => image x1
            [alt] => 小桔灯分类信息网
            [shuxing] => shux
        )

    [1] => Array
        (
            [src] => http://www.xiaojudeng.com/uploadfile/2011/0910/20110910100916803.jpg
            [class] => image x2
            [alt] => 小桔灯分类信息网
            [title] => abc
            [shuxing] => shux
        )

)

输出完毕 (耗时 0 秒) - 正常终止
  • 相关文章
发表评论
用户名: 匿名