我正在尝试编写将捕获此短语的正则表达式:
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,但是它不起作用并且它匹配两个字符串,你能帮助我吗? 谢谢!
答案 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
。