Regex: Поиск URL-адресов в фоновом режиме-изображение CSS, возникли проблемы

вот мой код регулярного выражения:

preg_match_all('/background[-image]*:[s]*url(["|']+(.*)["|']+)/', $css, $matches, PREG_SET_ORDER);

он ищет CSS, который выглядит так:

background:url('../blah.jpg');

моя проблема у меня есть некоторые CSS, которые я царапаю выглядит так:

background:transparent url('../blah.jpg');
background:transparent no-repeat url('../blah.jpg');

Я не эксперт, когда дело доходит до регулярного выражения, поэтому мне интересно, как я могу сказать ему пропустить что-либо после двоеточия и до URL.

3 ответов


Ths должен поймать все изображения, если я ничего не пропустил.

preg_match_all('~\bbackground(-image)?\s*:(.*?)\(\s*(\'|")?(?<image>.*?)?\s*\)~i',$str,$matches);
$images = $matches['image'];
print_r($images);

preg_match_all('/background(-image)??\s*?:.*?url\(["|\']??(.+)["|\']??\)/', $css, $matches, PREG_SET_ORDER);

Я заменил :[\s]* С :.*? что должно сделать трюк-означает, что он будет соответствовать любому символу, предыдущее регулярное выражение соответствует только пробелам после :


попробуйте это:

preg_match_all('/background[-image]*:.*[\s]*url\(["|\']+(.*)["|\']+\)/', $css, $matches, PREG_SET_ORDER);