你的示例只能得到这样的结果
Array
(
    [0] => Array
        (
            [0] => a.gif' 
        )    [1] => Array
        (
            [0] => 
        )    [2] => Array
        (
            [0] => a.gif'
        ))
由于a.gif'开始处并无“'”所以f后面的“'”是做为字符匹配的只有当
$str = "'a.gif' ";
才会得到
Array
(
    [0] => Array
        (
            [0] => 'a.gif' 
        )    [1] => Array
        (
            [0] => '
        )    [2] => Array
        (
            [0] => a.gif
        ))
这样的结果当然由于输入串的不同,得到的都是正确的结果你需要正确的理会
/(['\"]?)(.+)\\1/
的含义在html中图片名可以用单引号括起、可以用双引号括起、也可以不用引号括起
这就是 ['\"]? 而不是 ['\"] 的原因
当“'”和“"”做为引号而不是字符出现时,他们必须成对出现
这就是前面是(['\"]?)后面是\\1的原因注意
['\"]?是可以匹配空字符的,所以在某些php版本中引号并不单独被匹配

解决方案 »

  1.   

    不好意思,笔误。但是用
    <?
    $str = "'a.gif' ";
    preg_match_all("/(['\"]?)(.+)\\1 /isU", $str, $arr);
    print_r($arr);得到的还是
    Array
    (
        [0] => Array
            (
                [0] => 'a.gif' 
            )    [1] => Array
            (
                [0] => 
            )    [2] => Array
            (
                [0] => 'a.gif'
            ))难道这是因为php版本的问题吗?