2010-08-14 2 views
1

Я работаю на регулярное выражение, чтобы найти и заменить все матчи, которые не начинаются с URL (HTTPрегулярное выражение находят матч

относительные пути собираются быть преобразованы в полные пути абсолютных т.е. URL-адрес (Foo/бар)> URL ('http://foo/bar ')

матч:

  • URL (Foo/бар)
  • URL (' Foo/бар')

не совпадают:

Это то, что я придумал до сих пор, но я 'м не 100%

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

ответ

2

Что-то вроде этого должно быть достаточным:

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

Проблема с вашей заключается в том, что вы использовали отрицательный lookbehind вместо отрицательного lookahead. Вы также должны использовать [^\'] вместо ., в противном случае url('http://foo/bar') будет соответствовать не по выбору ', не получив отрицательного результата, потому что он 'http, а не http, а затем соответствует одной катете с .+?.

+0

только то, что мне нужно, спасибо за помощь и подсказку! – veilig