May 18

完美的img tag正则表达式及preg_match_all使用

 

最近发现一个神奇的PHP的preg_match_all编写代码时的错误
代码如下
preg_match_all('/<img.*src=(.*)\\s*.*>/iU',$content,$src);
$content为一串html,其中包含img tag,目的是想取得这串html中所有img的路径,也就是src值,并放到$src中。
理论上,上面这个代码没有任何问题,但实际上,它并没有起作用,正则没有写对,不能匹配成功。
真的很奇怪,到现在我都没有明白,这个正则哪里写错了,呵呵,看着,还是感觉蛮正确的。
将下面的添加上引号“"”,就可以匹配
preg_match_all('/<img.*src="(.*)"
\\s*.*>/iU',$content,$src);
但这样修改又有问题,用户可能输入的是单引号,如src='aaaa'
经某陈强人的修改,现在如下
preg_match_all("/<img.+src=('|\"|)?(.*)(
\\1)([\s].*)?>/ismUe", $content, $src);
完美啊,虽然偶看不太懂,呵呵。
使用方法如下
preg_match_all("/<img.+src=('|\"|)?(.*)(
\\1)([\s].*)?>/ismUe", $content, $src);
if(count($src[2])>0){
 foreach($src[2] as $v){
  $images[] = $v;
 }
 return $images;
}else{
 return false;
}

run:
$images = Array
(
    [0] => Array
        (
            [0] => <IMG src="
upload/201005181142377384.gif">
            [1] => <IMG src="
upload/201005181142378027.gif">
        )
    [1] => Array
        (
            [0] => "
            [1] => "
        )
    [2] => Array
        (
            [0] =>
upload/201005181142377384.gif
            [1] => upload/201005181142378027.gif
        )
    [3] => Array
        (
            [0] => "
            [1] => "
        )
    [4] => Array
        (
            [0] =>
            [1] =>
        )
)
如果有牛人可以再完善的,请踊跃发言,呵呵。

等等,下面还有精彩的文章哟:

to "完美的img tag正则表达式及preg_match_all使用"

Leave a Reply