这是我的正则表达式代码:
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之前跳过任何内容。
答案 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);