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);