什么是RegEx模式的DateTime (2008-09-01 12:35:45 )?
我知道这个错误:
没有找到结束分隔符“^”
使用:
preg_match('(?n:^(?=\d)((?<day>31(?!(.0?[2469]|11))|30(?!.0?2)|29(?(.0?2)(?=.{3,4}(1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|(16|[2468][048]|[3579][26])00))|0?[1-9]|1\d|2[0-8])(?<sep>[/.-])(?<month>0?[1-9]|1[012])\2(?<year>(1[6-9]|[2-9]\d)\d{2})(?:(?=\x20\d)\x20|$))?(?<time>((0?[1-9]|1[012])(:[0-5]\d){0,2}(?i:\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$)', '2008-09-01 12:35:45');给出此错误:
警告: preg_match() function.preg-match:编译失败:在第19行的E:\www\index.php中没有任何可重复的偏移量0
发布于 2008-09-01 11:23:07
@Espo:我只想说,regex令人难以置信。我不想写代码来做一些有用的匹配,比如你想知道用户输入的日期和时间。
Tom的解决方案似乎更站得住脚,因为它比以前简单了数百万倍,加上一些括号,您可以很容易地得到用户输入的值:
(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})如果您使用的是perl,那么您可以使用如下所示的值:
$year = $1;
$month = $2;
$day = $3;
$hour = $4;
$minute = $5;
$second = $6;其他语言也有类似的能力。请注意,如果要接受值(如个位数月),则需要对regex进行一些小的mods。
发布于 2008-09-01 11:14:40
这是一个简单的版本,适用于提到的格式,但并不是所有其他版本都适用于per @Espos:
(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) 发布于 2008-09-01 11:03:12
id=610
^(?=\d)(?:(?:31(?!.(?:0?2469|11))|(?:30|29)(?!.0?2)|29(?=.0?2.(?:(?:(?:16-9|2-9\d)?(?:048|2468|13579)|(?:(?:16|2468|3579)00)))(?:\x20|$))|(?:20-8|1\d|0?1-9))(-./)(?:1012|0?1-9)\1(?:16-9|2-9\d)?\d\d(?:(?=\x20\d)\x20|$))?(((0?1-9|1012)(:0-5\d){0,2}(\x20APM))|(01\d|20-3)(:0-5\d){1,2})?$
这个RE验证日期和/或时间模式。2月的日子也被确认为飞跃年。日期: dd/mm/yyyy或d/m/yy格式,在1/1/1600至31/12/9999之间。前导零是可选的。日期分隔符可以是匹配的破折号(-)、斜杠(/)或句点(.)时间: hh:MM:ss AM/PM 12小时格式(12:00上午11:59:59 PM)或hh:MM:ss军事时间格式(00:00- 23:59:59)。12小时时间格式: 1)该小时可能有一个前导零。2)对于12小时格式,分钟和秒是可选的。3)必须使用AM或PM,并且区分大小写。军事时间1)所有时间都必须有一个前导零,少于10.2)分钟是必须的。3)秒是可选的。Datetime:以上格式的组合。首先是日期,然后是由空格分隔的时间。(X) dd/mm/yyyy hh:MM:ss
编辑:确保您从regexlib.com网站复制RegEx,因为StackOverflow有时会删除或销毁特殊字符。
https://stackoverflow.com/questions/37732
复制相似问题