如果中间的两位数字不在排除列表中,我正在尝试编写一个与6位数匹配的RegEx。
例如,如果排除列表是(02,05),我想只匹配这些数字中的第一个
880199
880299
880599
我最接近的是与RegEx
的意思完全相反\b[0-9]{2}(02|05)\w+
我读了链接信息“正则表达式问题?”特别是“否定是棘手的”一节。
我无法弄清楚如何否定比赛。
解决方案必须是RegEx,因为它用于仅提供RegEx作为选项的在线平台的扩展点。它需要尽可能与语言无关,因为它必须在该平台上运行(我认为这是用PHP编写的)以及在.NET下运行。
我当前的尝试(与期望的相反)是http://regexr.com/3da5n
答案 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
- 尾随字边界