我正在努力寻找答案,以了解如何使用正则表达式匹配一系列数字,但不包括一个数字
ie:我正在寻找-AM19 / 0601-AM19 / 0805(但不是AM19 / 0803)的任何匹配项
我正在使用它来查看是否有任何匹配项:
AM19 / 6XX AM19 / 7XX AM19 / 8XX
/AM19\/0[678]
如:
if (preg_match('/AM19\/0[678]/', $perm) === 0) {
//do whatever
}
但是如何将AM19 / 803选项“排除”为不返回/不包含在比赛/搜索中?
答案 0 :(得分:1)
您可以在正则表达式中使用否定的超前断言:
~\bAM19/0(?!803)[678]\d{2}\b~
在此处,在匹配(?!803)
之后,我们将出现19/0
负向查找,如果803
在输入19/0
之后出现,则匹配失败。
还要注意,通过使用备用正则表达式定界符~
,可以避免在正则表达式中转义/
。
答案 1 :(得分:1)
您可以使用
\bAM19/(?!0803)\d+
甚至
(?:AM19/0803)(*SKIP)(*FAIL)|AM19/\d+
后者可能在顶部上方,请参见a demo on regex101.com。
答案 2 :(得分:1)
您不需要否定的前瞻或类似的事情。方括号可以接受多个范围(例如,在[a-zA-Z]
中)。您可以使用多个数字范围忽略不想要的数字。
解决方案: AM19\/0[6-8][0-9][0-24-9]
Regex101: https://regex101.com/r/6Zc6br/3