正则表达式不匹配特定位置的某些数字
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
^^^^^^^^^
如果列表不是动态的,您可以进一步增强交替 \b\d{2}(?!0[25])\d+\b
。
模式匹配:
\b
- 前导词边界
\d{2}
- 两位数
(?!02|05)
- 检查接下来的 2 位数字是否为 02
或 05
,如果是,匹配失败
\d+
- 1+ 位(如果一个单词只有六位,使用 \d{4}
)
\b
- 尾随单词边界
我正在尝试编写一个正则表达式,如果中间两位数字不在排除列表中,它将匹配一个 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
^^^^^^^^^
如果列表不是动态的,您可以进一步增强交替 \b\d{2}(?!0[25])\d+\b
。
模式匹配:
\b
- 前导词边界\d{2}
- 两位数(?!02|05)
- 检查接下来的 2 位数字是否为02
或05
,如果是,匹配失败\d+
- 1+ 位(如果一个单词只有六位,使用\d{4}
)\b
- 尾随单词边界