如何修改正则以排除指定字母+数字区间片段且保持匹配总长度为58字符
正则修改方案
最终修改后的完整正则
^.{19}_.{3}PDR_.{8}(?!(ABCD|CTNE|PFRE)006\d{2}).{9}.{3}_.{6}\.POC$
核心修改逻辑
- 新增开头
^和结尾$锚点:强制整体字符串完全匹配正则,从根源保证总长度固定为58字符,避免出现长度不符的字符串被部分匹配的问题 - 替换原有需要否定的片段:将原
(ABCD|CTNE|PFRE)006[0-9][0-9]替换为(?!(ABCD|CTNE|PFRE)006\d{2}).{9}:(?!...)是负向先行断言,判定接下来的字符不符合括号内的排除规则- 后缀
.{9}强制匹配固定9个字符,保证该片段长度和原要求完全一致
规则匹配验证
- 可匹配示例
NRM_0157F0680884976_598PDR_T0060000ABCD00719_00_6I1N0T.POC:对应位置的9字符为ABCD00719,不满足ABCD/CTNE/PFRE + 006 + 两位数字的排除规则,且总长度为58,可正常匹配 - 两类不可匹配字符串:
- 长度超标的字符串:总长度超过58,被结尾
$锚点拦截,匹配失败 - 长度不足的字符串:总长度不足58,被开头
^+结尾$的全匹配规则拦截,匹配失败
- 长度超标的字符串:总长度超过58,被结尾
- 被否定的片段固定为9字符,整体总长度固定为58字符,完全符合要求
内容的提问来源于stack exchange,提问作者user2175783
相关产品推荐
相关产品推荐

