php preg_replace在中间使用(.*)时返回第一个匹配

php preg_replace在中间使用(.*)时返回第一个匹配,php,regex,preg-replace,Php,Regex,Preg Replace,我有一些这样的代码: $string = "background: #FFFFFF url('http://www.zxczxc.com/asd.jpg') 20px 100px no-repeat"; $value = preg_replace('/background: (.*)? ([0-9\.]+)([a-z\%]+)?/', '$2', $string); 如何让preg\u replace返回20px而不是100px?您的(.*)与您想要的相反?需要在里面,否则搜索是贪婪的,但是

我有一些这样的代码:

$string = "background: #FFFFFF url('http://www.zxczxc.com/asd.jpg') 20px 100px no-repeat";
$value  = preg_replace('/background: (.*)? ([0-9\.]+)([a-z\%]+)?/', '$2', $string);
如何让
preg\u replace
返回
20px
而不是
100px

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

$value  = preg_replace('/background: (.*?) (-?[0-9\.]+)([a-z\%]+)?/','$2',$string);
您的
(.*)
与您的预期相反
需要在内部,否则搜索是贪婪的,但是可选的。如果像素为负数,还需要可选的前导字符
-

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

你能分享你的预期输出吗?我希望返回20px你想返回或替换吗?@chris85你能解决我的问题:)我现在可以处理0或负像素你能分享你的预期输出吗?我希望返回20px你想返回或替换吗?@chris85你能解决我的问题:)我现在可以处理0或负像素你的小补偿麻烦;-)这里没有兔子洞。你的麻烦几乎得不到补偿;-)这里没有兔子洞。