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

I need to create regex that allows below time values: single digit or double digits and optionally second.

All possible combination for single digit of 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

Accepted values are:

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

I tried some possible combination from, https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch04s06.html like:

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

But it doesn't work as expected above.

Can you please correct me on above sample or some other regex that allows above possible values.



Solution 1:[1]

The regex in the question doesn't make the am/pm optional.
And the minutes/seconds can be 1 group that occurs 1 to 2 times.

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

Test on regex101 here

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 LukStorms