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

问题描述 投票:2回答:3
  • 使用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选项,有来无回/或包含在匹配/搜索?

php regex preg-match
3个回答
1
投票

你可以在你的正则表达式使用负先行断言:

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

RegEx Demo

在这里,我们有匹配(?!803)如果19/0输入803之后出现,这将失败赛后负前瞻19/0

另外请注意,通过使用备用正则表达式的分隔符~你能避免在您正则表达式逃逸/


1
投票

你可以使用

\bAM19/(?!0803)\d+

甚至

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

后者可能会有点洁癖,看见a demo on regex101.com


1
投票

你并不需要负超前或类似的东西。方括号可以接受多个范围(如在[a-zA-Z],例如)。你可以不理会使用多个数字范围不必要的号码。

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

Regex101:https://regex101.com/r/6Zc6br/3

© www.soinside.com 2019 - 2024. All rights reserved.