正则表达式:数字范围,不包括特定数字

时间:2019-02-07 15:39:13

标签: php regex preg-match

  • 使用PHP

我正在努力寻找答案,以了解如何使用正则表达式匹配一系列数字,但不包括一个数字

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选项“排除”为不返回/不包含在比赛/搜索中?

3 个答案:

答案 0 :(得分:1)

您可以在正则表达式中使用否定的超前断言:

~\bAM19/0(?!803)[678]\d{2}\b~

RegEx Demo

在此处,在匹配(?!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