小时、分钟和可选部分的正则表达式,具有更多可能的格式

Regex for hours, min and optionally Section with more possible formats

我需要创建允许以下时间值的正则表达式: 一位数或两位数以及可选的第二位。

Hour/Minute/Second单个数字的所有可能组合:

hh:mm:ss AM/PM
h:m:s AM/PM
hh:m:s AM/PM
h:mm:s AM/PM
h:m:ss

接受的值为:

11:12:59 AM
1:2:3 PM
1:22:30 pm
01:2:00 PM
1:3 PM

我尝试了一些可能的组合, https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch04s06.html 喜欢:

^([0-1]?\d|2[0-3])(?::([0-5]?\d))?(?::([0-5]?\d))?( )[AaPp][Mm]

但它并没有像上面预期的那样工作。

能否请您纠正我上面的示例或其他一些允许上述可能值的正则表达式。

问题中的正则表达式没有使 am/pm 可选。
minutes/seconds 可以是出现 1 到 2 次的一组。

^(?:[01]?[0-9]|2[0-3])(?:[:][0-5]?[0-9]){1,2}(?:[ ][APap][Mm])?$

测试 regex101 here