正则表达式不匹配特定位置的某些数字

Regex to Not Match Certain Digits at Specific Positions

我正在尝试编写一个正则表达式,如果中间两位数字不在排除列表中,它将匹配一个 6 位数字。

例如,如果排除列表是 (02, 05) 我只想匹配这些数字中的第一个

880199
880299
880599

我最接近的结果与我对 RegEx 的预期正好相反

\b[0-9]{2}(02|05)\w+

我阅读了链接信息 "A regex question?",尤其是 "Negation is tricky."

部分

我不知道如何取消匹配。

解决方案必须是 RegEx,因为它被用于仅提供 RegEx 作为选项的在线平台的扩展点。它需要尽可能与语言无关,因为它必须 运行 在该平台上(我相信它是用 PHP 编写的)以及在 .NET 下。

我目前的尝试(与期望的相反)是在 http://regexr.com/3da5n

关键是你需要使用否定的前瞻来限制匹配。 lookahead 应该检查中间的 2 位数字,所以它应该放在前两位数字之后:

\b\d{2}(?!02|05)\d+\b
       ^^^^^^^^^  

regex demo

如果列表不是动态的,您可以进一步增强交替 \b\d{2}(?!0[25])\d+\b

模式匹配:

  • \b - 前导词边界
  • \d{2} - 两位数
  • (?!02|05) - 检查接下来的 2 位数字是否为 0205,如果是,匹配失败
  • \d+ - 1+ 位(如果一个单词只有六位,使用 \d{4}
  • \b - 尾随单词边界