php regex - 仅匹配1次匹配不匹配多个

时间:2013-11-26 22:41:41

标签: php regex

我正在尝试编写将捕获此短语的正则表达式:
background: url("../images/btn-send.png") no-repeat scroll -70px center rgba(0, 0, 0, 0);
但不是这个:
background: url("../images/btn-send.png") no-repeat scroll -70px 10px rgba(0, 0, 0, 0);

所以我应该只在...<number>px ...上获得匹配,而不是  ...<number>px <number>px ....

我试图使用下一个正则表达式:
background\s*:[^;]*?((-*\d+px|0)\s+){1}[a-z]
我在PHP preg_match

中使用它

我曾试图找到只有一次px,但是它不起作用并且它匹配两个字符串,你能帮助我吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

等待一个更优雅的答案(我不完全相信这个答案),这会有效:

<?php
$str1 = 'background: url("../images/btn-send.png") no-repeat scroll -70px  center rgba(0, 0, 0, 0);';
$str2 = 'background: url("../images/btn-send.png") no-repeat scroll -70px   10px   rgba(0, 0, 0, 0);';

var_dump(preg_match('/background\s*:[^;]*?((?<!\dpx|0|\s)\s+(-*\d+px|0)\s+)[a-z]/i',$str1));
var_dump(preg_match('/background\s*:[^;]*?((?<!\dpx|0|\s)\s+(-*\d+px|0)\s+)[a-z]/i',$str2));

那么,(?<!\dpx|0|\s)\s+做了什么?是说你的Npx / 0应该由至少一个空白字符来处理,但可能更多,前面没有((?<!...))空格(确保它与第一个空格字符匹配时有多个),另一个{{ 1}},或Npx