正则表达式匹配特定有效时间格式问题求助
解决方案:单个正则实现需求
可以用单个正则完成你的需求,核心是把两种匹配场景拆分为独立分支,同时复用ddhhmm的有效匹配规则避免冗余。
最终正则表达式
^VALID(?: (?:TIL|UNTIL) (?P<ddhhmm>(?:[012]\d|3[01])(?:[01]\d|2[0-3])(?:[0-5]\d))| (?P=ddhhmm)[-/](?P=ddhhmm))$
正则拆解说明
- 基础锚定:
^VALID确保字符串以VALID开头,$确保字符串结尾无多余内容 - 分支1:带TIL/UNTIL的场景
(?:TIL|UNTIL)匹配TIL或UNTIL关键词(?P<ddhhmm>(?:[012]\d|3[01])(?:[01]\d|2[0-3])(?:[0-5]\d))定义命名捕获组ddhhmm,实现有效时间格式匹配:(?:[012]\d|3[01]):匹配合法日期(00-29或30-31)(?:[01]\d|2[0-3]):匹配合法小时(00-19或20-23)(?:[0-5]\d):匹配合法分钟(00-59)
- 分支2:双时间场景
(?P=ddhhmm)复用之前定义的ddhhmm规则,确保两个时间都符合格式要求[-/]匹配分隔符-或/
测试验证
- 符合匹配的示例:
VALID TIL 312359VALID UNTIL 000000VALID 121212-302359VALID 010101/292359
- 不符合匹配的示例:
VALID TIL 322359(日期32不合法)VALID 122400-312359(小时24不合法)VALID 121260/312359(分钟60不合法)VALID TIL 123456-789012(带TIL却出现双时间,不符合规则)
内容的提问来源于stack exchange,提问作者Reid Carnes
相关产品推荐
相关产品推荐

