2
  • 使用 PHP

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

即:我正在寻找任何匹配 - 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 选项以不返回/或包含在匹配/搜索中?

4

3 回答 3

1

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

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

正则表达式演示

(?!803)在这里,我们在匹配后有一个否定的前瞻,如果在输入后立即出现19/0,则匹配失败。80319/0

另请注意,通过使用备用正则表达式分隔符~,您可以避免/在正则表达式中转义。

于 2019-02-07T15:44:01.293 回答
1

你可以使用

\bAM19/(?!0803)\d+

甚至

(?:AM19/0803)(*SKIP)(*FAIL)|AM19/\d+

后者可能有点过头了,请参阅regex101.com 上的演示

于 2019-02-07T15:44:35.657 回答
1

您不需要负前瞻或类似的东西。方括号可以接受多个范围([a-zA-Z]例如,在 中)。您可以使用多个数字范围忽略不需要的数字。

解决方案: AM19\/0[6-8][0-9][0-24-9]

正则表达式101: https ://regex101.com/r/6Zc6br/3

于 2019-02-07T15:52:17.030 回答