2010-02-12 17 views
0

我使用php的preg_match从字符串中获取命名的子组。我将用户生成的日期/时间字符串解析为格式良好的日期/时间标记。帮助正则表达式 - 要求在上午的AM/PM子字符串

这里是我的正则表达式

~(?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

感谢用户stereofrog写原来的正则表达式我! :) – user151841 2010-02-12 17:21:03

回答

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 
+0

太棒了!谢谢。 – user151841 2010-02-12 17:29:23