日期时间的正则表达式模式是什么 (2008-09-01 12:35:45 )?

2022-08-30 09:11:14

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 处没有任何重复


答案 1

@Espo:我不得不说正则表达式令人难以置信。我讨厌编写对匹配项有用的代码,例如,如果你想真正找出用户键入的日期和时间。

看起来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;

其他语言将具有类似的功能。请注意,如果您想接受诸如个位数月份之类的值,则需要对正则表达式进行一些次要的mod。


答案 2

一个简单的版本,将适用于上述格式,但不是所有其他@Espos:

(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) 

推荐