我有这些字符串,我想匹配b=(d+)
而不是ab=(d+)
。我该怎么做?
"ab=10&b=20" -> 20
"b=20&ab=10" -> 20
"b=20" -> 20
"ab=10" -> no match
您可以使用
b
,例如:
bb=(d+)
仅在单词边界(w
和w
之间)匹配。
使用负面的回溯:
/(?<!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
演示
这是我
得到的:
(?:[^a-zA-Z])(?:b=(d+))
(?:[^a-zA-Z])
它不能以 a-z 开头。你可能想改变这一点,但你明白了 (?:b=(d+))
我把它包装成一个组以使正则表达式组合它,?:
确保\1
仍然20