Я использую preg_match в php для получения именованных подгрупп из строки. Я анализирую сгенерированные пользователем строки даты / времени в хорошо отформатированные токены даты / времени.
Вот мое регулярное выражение
~(?P<month>\d?\d)(/|-)(?P<day>\d?\d)(/|-)(?P<year>\d\d\d?\d?) +(?P<time>[\d: +((A|a)|(P|p))(M|m)]+)~i
И он правильно разбирает даты как
01-17-10 09:30 pm
2/1/2010 06:19am
на составные части. Однако он принимает 02/11/2010 06:19
без строки am / pm, чего я бы не хотел. Что я делаю не так?