如何编写正则表达式匹配后三位比前三位大1的6位数字?
6位数字特殊模式匹配方案
已实现的匹配类型
- 四位重复数字:
1111、2222…… - 连续递增数字:
123456、234567…… - 回文数字:
123321、234432……
目标模式匹配:前三位xyz,后三位xyz+1的6位数字
需要匹配形如100101(100+1=101)、101102、199200这类6位数字,核心规则是前三位数值加1等于后三位数值(含进位场景,如999+1=1000时,后三位取000)。
正则表达式实现
^(?:(?:[0-8]\d{2}|9[0-8]\d|99[0-8])(?=(?:(\d)(\d)([0-8])(?=\1\2(?:\3+1))|(\d)([0-8])9(?=\1(?:\2+1)0)|([0-8])99(?=(?:\1+1)00)))|999000)$
正则逻辑说明
这个正则通过分场景覆盖所有符合规则的情况:
- 普通非全9前三位:
- 个位0-8(无进位):匹配前三位如
123,正向预查后三位为124(前两位不变,个位+1) - 个位为9、十位0-8(单进位):匹配前三位如
129,正向预查后三位为130(个位变0,十位+1) - 个位和十位为9、百位0-8(双进位):匹配前三位如
199,正向预查后三位为200(个位、十位变0,百位+1)
- 个位0-8(无进位):匹配前三位如
- 特殊全9前三位:单独匹配
999000,对应999+1=1000,取后三位000的场景
参考正则技巧整理
针对数值递增类的正则匹配,核心技巧是拆分数字位,分场景处理进位逻辑:
- 把多位数拆分为单个数字位,针对无进位、单一位进位、多位进位的不同情况分别编写匹配规则
- 利用反向引用复用前序捕获的数字位,结合固定数字匹配进位后的结果
- 对全9这类边界场景单独处理,避免遗漏匹配
内容的提问来源于stack exchange,提问作者Trí Nhân Trần
相关产品推荐
相关产品推荐

