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

时间:2012-03-27 15:51:13

标签: php regex screen-scraping

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

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 个答案:

答案 0 :(得分:16)

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

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

答案 1 :(得分:1)

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

我将:[\s]*替换为:.*?,这应该可以解决问题 - 意味着它会匹配任何字符,之前的正则表达式仅匹配:之后的空格

答案 2 :(得分:0)

试试这个:

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