帮助正则表达式 - 最后需要AM / PM子串

时间:2010-02-12 17:20:22

标签: php regex preg-match

我正在使用php的preg_match从字符串中获取一个命名的子组。我正在将用户生成的日期/时间字符串解析为格式正确的日期/时间令牌。

这是我的正则表达式

~(?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字符串,我不想这样做。我做错了什么?

1 个答案:

答案 0 :(得分:3)

您正在使用角色类[\d: +((A|a)|(P|p))(M|m)]作为时间表达式。此字符集仅描述一个字符,而不是具有已定义模式的序列。

请尝试(?P<time>\d\d?:\d\d *[ap]m)

~(?P<month>\d\d?)(/|-)(?P<day>\d\d?)(/|-)(?P<year>\d\d\d?\d?) +(?P<time>\d\d?:\d\d *[ap]m)~i