Почему это регулярное выражение PHP не извлекает url из значения css?

Я хочу извлечь url из фона css property "url ('/ img / hw (11) .jpg') no-repeat". Я пытался:

$re = '/url\(([\'\"]?.*\.[png|jpg|jpeg|gif][\'\"]?)\)/i'; $text = "url('/img/hw (11).jpg')"; preg_match_all($re, $text, $matches); print_r($matches); 

и это дает мне:

 Array ( [0] => Array ( ) [1] => Array ( ) ) 

Вот правильное регулярное выражение. «. *» В середине вашего регулярного выражения слишком жадный. Кроме того, попробуйте заменить квадратные скобки на скобки. Также обратите внимание, что, поскольку вы используете одиночные кавычки вокруг строки, вам не нужно избегать двойных кавычек.

 $re = '/url\(([\'"]?.[^\'"]*\.(png|jpg|jpeg|gif)[\'"]?)\)/i'; 

Пытаться:

 /url\(([\'\"]?.*\.(png|jpg|jpeg|gif)[\'\"]?)\)/i 

Вместо. Квадратные скобки выполняют сравнение по-символам, а не сравнение или сравнение, которое вы ищете.

Я думаю, что, вероятно, в этой части [png | jpg | jpeg | gif]. Он должен соответствовать только одиночным символам.
Вы должны сделать это вместо этого:

 /url\([\'\"]?(.*\.(jpg|png|jpeg|gif)[\'\"]?)\)/