php preg_replace return 中间使用 (.*) 时首先匹配

php preg_replace return first match when use (.*) in middle

我有一些这样的代码:

$string = "background: #FFFFFF url('http://www.zxczxc.com/asd.jpg') 20px 100px no-repeat";
$value  = preg_replace('/background: (.*)? ([0-9\.]+)([a-z\%]+)?/', '', $string);

如何让 preg_replace 变成 return 20px 而不是 100px

您的 (.*)? 与您的意图相反 ? 需要在里面,否则搜索是贪婪的,但是可选的。如果像素为负,您还需要一个可选的前导 -

$value  = preg_replace('/background: (.*?) (-?[0-9\.]+)([a-z\%]+)?/','',$string);