正则表达式:在背景图像CSS中查找URL,遇到问题

dal*_*len 6 php regex screen-scraping

这是我的正则表达式代码:

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

它查找看起来像这样的CSS:

background:url('../blah.jpg');
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我刮的一些CSS看起来像这样:

background:transparent url('../blah.jpg');
background:transparent no-repeat url('../blah.jpg');
Run Code Online (Sandbox Code Playgroud)

当谈到正则表达式时,我不是专家,所以我想知道我怎么能告诉它在冒号后和URL之前跳过任何东西.

inh*_*han 16

除非我跳过任何东西,否则应该捕获所有图像.

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