12 hrs for preg match with single and double digit in php

PHP
((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))

12:00 pm    ---------     OK
13:00
1:00 am    ---------     OK
5:5 am
5:05 PM    ---------     OK 
55:55 
09:59    // valid time, but meridiem is missing
:01
0:59
00:59 PM/\b(stackoverflow)\b/
Source

Also in PHP: