2010-08-14 165 views
1

我工作的一个正则表达式查找和替换所有不与URL(HTTP正则表达式查找匹配

相对路径将被转换为完全绝对路径 即开始比赛: 网址(富/巴)> URL( 'http://foo/bar ')

匹配:

  • URL(富/巴)
  • URL(' 富/酒吧')

不匹配:

这是我想出到目前为止,但我'不是100%那里

 $fileContents = preg_replace(
      '/url\(("|\')?(?<!(http))(.+?)("|\')?\)/i', 
      'url(\'' . $glmBaseUrl . $subDir . '/$3\')', 
      $fileContents 
     ); 

回答

2

这样的事情应该足够了:

preg_replace('/url\(\'?(?!http)([^\']+?)\'?\)/', 
    "url('$glmBaseUrl$subDir\$1')", $fileContents); 

您的问题在于您使用了负向后视而不是负向视向。您还应该使用[^\']代替.,否则url('http://foo/bar')将不匹配可选',没有负超前,因为它'http,而不是http,然后用.+?匹配的单引号匹配。

+0

正是我所需要的,感谢您的帮助和提示! – veilig 2010-08-14 04:11:02