我正在使用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字符串,我不想这样做。我做错了什么?
答案 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