我有这些字符串,我希望仅匹配b=(\d+)
ab=(\d+)
。我该怎么做?
"ab=10&b=20" -> 20
"b=20&ab=10" -> 20
"b=20" -> 20
"ab=10" -> no match
答案 0 :(得分:5)
您可以使用\b
,例如:
\bb=(\d+)
仅匹配单词边界(\w
与\w
之间)。
答案 1 :(得分:1)
/(?<!a)b=(\d+)/
现在,这将匹配任何数字,后跟b=
,如果之前没有字符a
。
测试用例:
$array = array(
"ab=10&b=20",
"b=20&ab=10",
"b=20",
"ab=10"
);
foreach ($array as $str) {
if (preg_match('/(?<!a)b=(\d+)/', $str, $matches)) {
echo $matches[1], PHP_EOL;
} else {
echo "No match", PHP_EOL;
}
}
输出:
20
20
20
No match
答案 2 :(得分:0)
这就是我得到的:
(?:[^a-zA-Z])(?:b=(\d+))
(?:[^a-zA-Z])
它不能以a-Z开头。你可能想要改变这个,但你明白了
(?:b=(\d+))
我将其整理成一组以使正则表达式合并,?:
确保\\1
仍为20