如何编写匹配指定时间格式正则任意开头部分的正则表达式?
正则表达式简化方案:匹配完整时间区间及合法开头片段
要实现匹配HH:MM - HH:MM完整格式,同时兼容该格式的任意合法开头片段(比如2、23、23:、23:5、23:59、23:59 -等),且排除22: - 23:00这类不符合逻辑的输入,可以用带负向预查的简化正则:
^(?!.*:\s-)(?:\d{0,2}:?\d{0,2} ?-? ?\d{0,2}:?\d{0,2})?$
逻辑说明:
^(?!.*:\s-):负向预查规则,直接排除所有包含:后紧跟空格和-的字符串,从根源上避免匹配22: - 23:00这类错误格式- 后半段
(?:\d{0,2}:?\d{0,2} ?-? ?\d{0,2}:?\d{0,2})?$:覆盖从空字符串、单个数字、部分时间到完整时间区间的所有合法开头片段,保证匹配的内容是原格式从左到右的递进片段,不会出现跳步情况
如果不需要匹配空字符串,只需把末尾的?去掉即可:
^(?!.*:\s-)\d{0,2}:?\d{0,2} ?-? ?\d{0,2}:?\d{0,2}$
内容的提问来源于stack exchange,提问作者B0773N
相关产品推荐
相关产品推荐

