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

新手上路,请多包涵

DateTime (2008-09-01 12:35:45) 的 RegEx 模式是什么?

我收到此错误:

未找到结束分隔符 ‘^’

使用:

 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 处没有重复内容

原文由 Alexander Morland 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 322
2 个回答

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

看起来汤姆的解决方案会更站得住脚,因为它简单了很多倍,并且通过添加一些括号,您可以轻松地获得用户键入的值:

 (\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;

其他语言也有类似的能力。请注意,如果您想接受单位数月份等值,则需要对正则表达式进行一些小修改。

原文由 Greg Hewgill 发布,翻译遵循 CC BY-SA 2.5 许可协议

带有验证的简单正则表达式日期时间

^(\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]) ([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$

但它不能验证不包括 31 天的月份(例如 2022-11-31、2022-02-30)

原文由 Seongjoo Park 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题