我这里有这个正则表达式模式/^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
。用于验证带有可选前导零的HH:MM 24小时字符串。
但是,当我将它与字符串23:59
匹配时,例如,它可以工作。这是一件好事。但我也想匹配这些字符串:2
,23
,23:
,23:5
和23:59
。经过几个小时的调试,我仍然找不到这样的东西,如果它存在的话。
(如果它是有用的,我使用Objective-C正则表达式引擎,或者我也可以选择使用Swift的)
您可以从数字00-23或开始匹配,并使所有的分钟部分都是可选的。
^(?:[01]?[0-9]|2[0-3])(?::(?:[0-5][0-9]?)?)?$
^
字符串 起始(?:
非捕获组[01]?[0-9]
匹配0- 19或0-9|
或2[0-3]
match 20-23
)
关闭组(?:
非捕获组:
匹配:
字符(?:[0-5][0-9]?)?
可选匹配5和可选数字0-9
)?
关闭组并使其为可选$
字符串结束
Regex演示
看起来可以工作:
^(?:[01]?[0-9]|2[0-3])(?::(?:[0-5]?[0-9])?)?$
查看在线演示
^
-启动字符串锚。(?:
-打开第一个非捕获组:[01]?
-可选0或1;[0-9]
-任意数字;|
- Or:2[0-3]
- 2后面跟着从0到3的数字;)
-关闭第一个非捕获组。
(?:
-打开第二个非捕获组::
- A冒号;(?:
-打开第3个非捕获组:[0-5]?[0-9]
-可选数字0到5和数字0到9;)?
-关闭第3个非捕获组并使其为可选。
)?
-关闭第二个非捕获组并使其成为可选的。
$
-结束字符串锚。