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

时间:2016-04-26 20:08:08

标签: regex language-agnostic

如果中间的两位数字不在排除列表中,我正在尝试编写一个与6位数匹配的RegEx。

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

880199
880299
880599

我最接近的是与RegEx

的意思完全相反
\b[0-9]{2}(02|05)\w+

我读了链接信息“正则表达式问题?”特别是“否定是棘手的”一节。

我无法弄清楚如何否定比赛。

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

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

1 个答案:

答案 0 :(得分:2)

重点是你需要使用负前瞻来限制匹配。前瞻应该检查中间2位数,所以它应该放在前两位之后:

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

请参阅regex demo

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

的变更

模式匹配:

  • \b - 领先的字边界
  • \d{2} - 两位数
  • (?!02|05) - 检查接下来的两位数是02还是05,如果是,则表示匹配失败
  • \d+ - 1位数字(如果一个字中只有六位数,请使用\d{4}
  • \b - 尾随字边界