Php 若模式前面有字符串,则避免正则表达式匹配

Php 若模式前面有字符串,则避免正则表达式匹配,php,regex,Php,Regex,我有这些字符串,我只想匹配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之间)。您可以使用\b,如: \bb=(\d+) 仅在单词边界处匹配(介于\w和非\w之间)。这是我得到的: (?:[^a-zA-Z])(?:b=(\d+)

我有这些字符串,我只想匹配
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
之间)。

您可以使用
\b
,如:

\bb=(\d+)
仅在单词边界处匹配(介于
\w
和非
\w
之间)。

这是我得到的:

(?:[^a-zA-Z])(?:b=(\d+))
(?:[^a-zA-Z])
它不能以a-Z开头。您可能想更改此选项,但您已经明白了
(?:b=(\d+)
我将其包装在一个组中以使正则表达式将其组合,
?:
确保
\\1
仍然是
20
这就是我得到的:

(?:[^a-zA-Z])(?:b=(\d+))
(?:[^a-zA-Z])
它不能以a-Z开头。您可能想更改此选项,但您已经明白了
(?:b=(\d+)
我将其包装在一个组中,以使正则表达式将其组合起来,
?:
确保
\\1
仍然是
20
使用:

输出:

20
20
20
No match

使用:

输出:

20
20
20
No match

完美!谢谢真的很感谢所有其他的答案,伙计们!让他们来。单词边界,我没想到,聪明。我在vim中意识到单词边界。维姆很聪明!:)@很高兴你解决了这个问题。但在将来,还请提及您正在使用的regex平台/引擎(或者您将得到一些使用regex引擎不支持的功能的答案)。在这种情况下,您可以更新问题以包含标记
[vim]
。干杯完美的谢谢真的很感谢所有其他的答案,伙计们!让他们来。单词边界,我没想到,聪明。我在vim中意识到单词边界。维姆很聪明!:)@很高兴你解决了这个问题。但在将来,还请提及您正在使用的regex平台/引擎(或者您将得到一些使用regex引擎不支持的功能的答案)。在这种情况下,您可以更新问题以包含标记
[vim]
。干杯