如何修正正则以匹配带前导0的1-999数字及24小时制时间?
解决方案
最终正则表达式
可以用以下正则匹配符合要求的字符串:
^D(?!0{1,3})\d{1,3} (2[0-3]|[01]\d):[0-5]\d$
各部分逻辑拆解
^D:匹配字符串开头的大写字母D(?!0{1,3})\d{1,3}:处理XXX部分的核心规则:(?!0{1,3})是负向前瞻断言,直接排除0、00、000这三种全0情况\d{1,3}匹配1-3位数字,允许前导0,结合前面的断言后,只会匹配1-999范围内的数字(包括001、012这类带前导0的格式)
:匹配DXXX与时间部分之间的空格(2[0-3]|[01]\d):[0-5]\d:沿用你提供的24小时制时间匹配规则,确保时间格式合法(小时00-23,分钟00-59)
示例验证
- 匹配成功:
D001 23:59、D010 00:00、D999 12:34、D1 08:05 - 匹配失败:
D000 10:00(XXX为全0)、D1000 09:00(XXX超过3位)、D01 24:00(小时无效)、D02 12:60(分钟无效)
内容的提问来源于stack exchange,提问作者Renaud is Not Bill Gates
相关产品推荐
相关产品推荐

