正则表达式如何匹配带固定长度规则区域的完整字符串
正则匹配方案
N=5 场景可用正则
^\d{0,5}-{0,5}(?<=^.{5})[a-zA-Z0-9-]*$
如果要求固定区域后必须存在内容,将末尾的*替换为+即可。
规则说明
- 核心思路是将固定长度区域的规则转化为「若干数字 + 若干横杠,总长度恰好为N」,天然满足「出现横杠后剩余位置全为横杠」的要求
- 用正向回顾断言
(?<=^.{5})锁定固定区域长度为5,避免出现固定区域长度不足的错误匹配 - 固定区域后的匹配规则直接按需求放开数字、横杠、字母的限制,不会和前半部分规则冲突
验证情况
可匹配示例全部通过
12345ABC、12345123:前5位全为数字,符合规则1234-1、1234--1:前5位前4位为数字、最后1/2位为横杠,符合规则1----1AB:前5位第1位为数字、后4位为横杠,符合规则
禁止匹配示例全部拦截
1-2-3-A:前5位出现横杠后又出现数字,不符合规则----1AB:前5位最后一位为数字,出现在横杠之后,不符合规则--1--1A:前5位第三位为数字,出现在横杠之后,不符合规则
通用写法
如果需要调整固定区域长度N,只需要将正则中的两处5替换为对应数值即可,例如N=8时正则为:
^\d{0,8}-{0,8}(?<=^.{8})[a-zA-Z0-9-]*$
内容的提问来源于stack exchange,提问作者fbindel
相关产品推荐
相关产品推荐

