Регулярное выражение для переменной 10 КБ - ›пустой ответ от сервера

Я пытаюсь захватить все URL-адреса в большом файле css.

Я пробовал использовать это регулярное выражение:

preg_match_all("/url\('(\\'|[^'])*'\)/m", $css, $matches);

$css - это переменная размером 10 КБ, читаемая из файла css с использованием file_get_contents.
$matches - пустой массив.

Однако это приводит к (net::ERR_EMPTY_RESPONSE) ошибке в chrome: сервер не отправляет никаких данных. Если я верну функцию непосредственно перед этой строкой, все будет работать нормально. Если я верну функцию чуть ниже этой строки, я получу пустой ответ.

Он даже не отправляет данные, которые я вывел перед этой строкой, и отвечает (пустым ответом) в течение нескольких секунд - далеко не 30-секундный тайм-аут.

Он работал нормально, когда я впервые использовал это регулярное выражение и передал результат в приведенный выше код. preg_match_all("/@font-face{[^}]+}/m", $css, $matches);
Эта строка была до того, как я понял, что мне нужны другие URL-адреса, а не только шрифты.

Кто-нибудь знает, что пошло не так?

ОБНОВЛЕНИЕ. Может быть, это ошибка?
https://bugs.php.net/bug.php?id=62049
ссылки на:
http://codepad.org/FmlJi8N9
и быстрый поиск в Google позже:
Предупреждение : preg_match (): Внутренний pcre_fullinfo ()

Как я могу это исправить?


person Filip Haglund    schedule 20.07.2013    source источник
comment
Попробуйте сопоставить строку за строкой, url вряд ли разойдется на две строки.   -  person Mike Szyndel    schedule 20.07.2013
comment
журналы сервера дают вам какие-нибудь подсказки?   -  person Orangepill    schedule 20.07.2013
comment
В логах ничего не нашел. Кроме того, explode(PHP_EOL, $subject); и foreach не помогли решить эту проблему.   -  person Filip Haglund    schedule 21.07.2013


Ответы (1)


Если я правильно понял, вы хотите это сделать:

preg_match_all("/url\([^)]*\)/m", $css, $matches);
person Karoly Horvath    schedule 20.07.2013
comment
Это сработало! Вы видите причину, по которой мое дерьмовое регулярное выражение не удалось? - person Filip Haglund; 21.07.2013
comment
Что ж, у меня простое жадное выражение, оно будет читать столько совпадений, сколько нужно, так что нет шансов на тайм-аут. Не совсем уверен насчет твоего ... каковы были твои намерения с \\'? - person Karoly Horvath; 21.07.2013
comment
Чтобы разрешить экранированные кавычки в пути. Я заметил, что мы используем комбинацию 'и без кавычек, поэтому я также изменил код, чтобы он соответствовал этому. Ваше регулярное выражение прекрасно вписывается в новый код. - person Filip Haglund; 21.07.2013