我想写一个正则表达式来匹配HH:MM:SS和MM:SS。
的匹配
所以我试过
(([0-5]?[0-9]):([0-5]?[0-9]))|(([0-9]?[0-9]):([0-5]?[0-9]):([0-5]?[0-9]))
我想要添加的只是一个带有两个时间正则表达式的OR(|)语法。
但它与HH:MM:SS不匹配
我错过了什么?
我已经查看了这些文章:
答案 0 :(得分:2)
交替运算符之前的表达式在交替运算符之后的表达式之前匹配。
如果您锚定这些表达式的开头和结尾,请执行以下操作:
(^([0-5]?[0-9]):([0-5]?[0-9]))$|^(([0-9]?[0-9]):([0-5]?[0-9]):([0-5]?[0-9])$)
......你应该得到你期望的行为。
如果你匹配一个较长的字符串,那么你可以先放一个最长的匹配:
((([0-9]?[0-9]):([0-5]?[0-9]):([0-5]?[0-9])|([0-5]?[0-9]):([0-5]?[0-9])))
或重写正则表达式,如下所示:
((\d{1,2}:)?[0-5]?\d:[0-5]?\d)
答案 1 :(得分:1)
你的问题不清楚。无论我理解什么,我都会建议以下正则表达式:
^([01]\d?|2[0-4]):[0-5]\d(:[0-5]\d)?$
可能有更有效的方法,但我只能想到这个!