регулярное выражение найти соответствие - PullRequest
1 голос
/ 14 августа 2010

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

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

match:

  • url (foo / bar)
  • url (' foo / bar ')

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

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

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

1 Ответ

2 голосов
/ 14 августа 2010

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

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

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

...