用于匹配只需要以有效序列开头的模式的正则表达式
Regex for matching a pattern which only needs to start with a valid sequence start
我这里有这个正则表达式模式 /^([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 正则表达式引擎。)
看起来以下方法可行:
^(?:[01]?[0-9]|2[0-3])(?::(?:[0-5]?[0-9])?)?$
在线查看demo
^
- 开始字符串锚点。
(?:
- 打开第一个非捕获组:
[01]?
- 可选零或一;
[0-9]
- 任何数字;
|
- 或者:
2[0-3]
- 一个二后跟一个从零到三的数字;
)
- 关闭第一个非捕获组。
(?:
- 打开第二个非捕获组:
:
- 一个冒号;
(?:
- 打开第三个非捕获组:
[0-5]?[0-9]
- 可选数字从零到五和数字从零到九;
)?
- 关闭第 3 个非捕获组并将其设为可选。
)?
- 关闭第二个非捕获组并使其可选。
$
- 结束字符串锚点。
您可以用数字 00-23 开始匹配,或者将所有分钟部分设为可选。
^(?:[01]?[0-9]|2[0-3])(?::(?:[0-5][0-9]?)?)?$
说明
^
字符串开头
(?:
非捕获组
[01]?[0-9]
匹配 00 - 19 或 0-9
|
或
2[0-3]
匹配 20-23
)
关闭群组
(?:
非捕获组
:
匹配一个:
字符
(?:[0-5][0-9]?)?
可选匹配 5 和可选数字 0-9
)?
关闭组并使其可选
$
字符串结束
我这里有这个正则表达式模式 /^([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 正则表达式引擎。)
看起来以下方法可行:
^(?:[01]?[0-9]|2[0-3])(?::(?:[0-5]?[0-9])?)?$
在线查看demo
^
- 开始字符串锚点。(?:
- 打开第一个非捕获组:[01]?
- 可选零或一;[0-9]
- 任何数字;|
- 或者:2[0-3]
- 一个二后跟一个从零到三的数字;)
- 关闭第一个非捕获组。
(?:
- 打开第二个非捕获组::
- 一个冒号;(?:
- 打开第三个非捕获组:[0-5]?[0-9]
- 可选数字从零到五和数字从零到九;)?
- 关闭第 3 个非捕获组并将其设为可选。
)?
- 关闭第二个非捕获组并使其可选。
$
- 结束字符串锚点。
您可以用数字 00-23 开始匹配,或者将所有分钟部分设为可选。
^(?:[01]?[0-9]|2[0-3])(?::(?:[0-5][0-9]?)?)?$
说明
^
字符串开头(?:
非捕获组[01]?[0-9]
匹配 00 - 19 或 0-9|
或2[0-3]
匹配 20-23
)
关闭群组(?:
非捕获组:
匹配一个:
字符(?:[0-5][0-9]?)?
可选匹配 5 和可选数字 0-9
)?
关闭组并使其可选$
字符串结束