在做CSS中相对路径转绝对路径的工作。
但首要匹配这个路径。$a= <<<ToD
#fbBox a.fb {
background-image: url(http://www.zzxj.net/graphics/blank.gif);
background-color: transparent;
/*  white-space: nowrap; */
_zoom: 1;  /* gives layout for ie6 */
}ToD;
$b= <<<ToD
#fbBox a.fb {
background-image: url(graphics/blank.gif);
background-color: transparent;
/*  white-space: nowrap; */
_zoom: 1;  /* gives layout for ie6 */
}ToD;
$c= <<<ToD
#fbBox a.fb {
background-image: url('graphics/blank.gif');
background-color: transparent;
/*  white-space: nowrap; */
_zoom: 1;  /* gives layout for ie6 */
}
$d= <<<ToD
#fbBox a.fb {
background-image: url("graphics/blank.gif");
background-color: transparent;
/*  white-space: nowrap; */
_zoom: 1;  /* gives layout for ie6 */
}求正则:要求只匹配相对路径,绝对路径或URI(含域名的)不匹配。 url()里可以有引号(单引或双引)。
测了办天没有好办法,贴这求救了。

解决方案 »

  1.   

    $a= <<<ToD
    #fbBox a.fb {
        background-image: url(http://www.zzxj.net/graphics/blank1.gif);
        background-color: transparent;
    /*     white-space: nowrap; */
        _zoom: 1;  /* gives layout for ie6 */
    }#fbBox a.fb {
        background-image: url(graphics/blank2.gif);
        background-color: transparent;
    /*     white-space: nowrap; */
        _zoom: 1;  /* gives layout for ie6 */
    }#fbBox a.fb {
        background-image: url('graphics/blank3.gif');
        background-color: transparent;
    /*     white-space: nowrap; */
        _zoom: 1;  /* gives layout for ie6 */
    }
    #fbBox a.fb {
        background-image: url("graphics/blank4.gif");
        background-color: transparent;
    /*     white-space: nowrap; */
        _zoom: 1;  /* gives layout for ie6 */
    }#fbBox a.fb {
        background-image: url(/graphics/blank5.gif);
        background-color: transparent;
    /*     white-space: nowrap; */
        _zoom: 1;  /* gives layout for ie6 */
    }#fbBox a.fb {
        background-image: url('/graphics/blank6.gif');
        background-color: transparent;
    /*     white-space: nowrap; */
        _zoom: 1;  /* gives layout for ie6 */
    }
    #fbBox a.fb {
        background-image: url("/graphics/blank7.gif");
        background-color: transparent;
    /*     white-space: nowrap; */
        _zoom: 1;  /* gives layout for ie6 */
    }
    #fbBox a.fb {
        background-image: url('http://www.zzxj.net/graphics/blank8.gif');
        background-color: transparent;
    /*     white-space: nowrap; */
        _zoom: 1;  /* gives layout for ie6 */
    }
    #fbBox a.fb {
        background-image: url("http://www.zzxj.net/graphics/blank1.gif");
        background-color: transparent;
    /*     white-space: nowrap; */
        _zoom: 1;  /* gives layout for ie6 */
    }
    ToD;$p = "#url\(['\"]?(?!http:/|/)([^)'\"]+)#i";
    preg_match_all($p, $a, $r);
    print_r($r[1]);
    Array ( [0] => graphics/blank2.gif [1] => graphics/blank3.gif [2] => graphics/blank4.gif )
      

  2.   

    老大太强了
    正向预查,反向预查,没搞清楚,就想要这个的(?!http:/|/)
    但查下手册,说用反向否定,没成功。另想用preg_callback_replace()的,但传参没成功(要将一个路径变量传进去).
      

  3.   

    用 _preg_replace_callback() 就简单多了控制的自由度也大了许多
    回调函数的参数实际就是匹配到的结果数组(一维的,有如preg_match)$a = <<<ToD
    #fbBox a.fb {
        background-image: url(http://www.zzxj.net/graphics/blank.gif);
        background-color: transparent;
    /*     white-space: nowrap; */
        _zoom: 1;  /* gives layout for ie6 */
    }
    ToD;preg_replace_callback("/url\((.+)\)/i", 'foo', $a);function foo($r) {
      print_r($r); //处理匹配结果
      return $r[0]; //返回替换值
    }
    Array
    (
        [0] => url(http://www.zzxj.net/graphics/blank.gif)
        [1] => http://www.zzxj.net/graphics/blank.gif
    )
      

  4.   


    但我想给他一个可变变量foo($r)可能要多加一个变量$path,不止一个参数。我看了该函数的最后部分有列子,但没测成功
      

  5.   

    回调函数没有自定义参数
    手册中的
    print preg_replace_callback($pattern,array($this,'cb'),$string);
    只是声明回调函数是类中的一个方法处理所需的额外参数可在回调函数中声明全局变量或方法中使用类属性来解决