首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegEx中一个日期时间字符串中的一种分隔符

RegEx中一个日期时间字符串中的一种分隔符
EN

Stack Overflow用户
提问于 2010-07-05 18:21:39
回答 3查看 217关注 0票数 1

有没有办法编写一个正则表达式,只在一个日期时间字符串中验证一种类型的分隔符?

例如,30/04/2010是正确的,但30-04/2010是错误的。

我在谷歌上找到了一些关于回溯的东西,但我不太确定如何使用它。例如,如果我有这个正则表达式:

(?P<date>((31(?![\.\-\/\—\ \,\–\-]{1,2}(Feb(ruary)?|Apr(il)?|June?|(Sep(?=\b|t)t?|Nov)(ember)?)))|((30|29)(?![\.\-\/\—\ \,\–\-]{1,2}Feb(ruary)?))|(29(?=[\.\-\/\—\ \,\–\-]{1,2}Feb(ruary)?[\.\-\/\—\ \,\–\-]{1,2}(((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])[\.\-\/\—\ \,\–\-]{1,2}(Jan(uary)?|Feb(ruary)?|Ma(r(ch)?|y)|Apr(il)?|Ju((ly?)|(ne?))|Aug(ust)?|Oct(ober)?|(Sep(?=\b|t)t?|Nov|Dec)(ember)?)[\.\-\/\—\ \,\–\-]{1,2}((1[6-9]|[2-9]\d)\d{2}))

那么我该如何在这里使用回溯呢?

非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-05 18:25:18

不能回答您的问题,但是您是否考虑过使用strtotime()?

它是一个非常灵活的函数,能够解析任何英文日期和时间:

代码语言:javascript
复制
Feb 2, 2010
February 2, 2010
02/02/10
4 weeks ago
Next Monday

如果日期无法解析,该函数将返回false (或PHP5.1之前的-1 )。

有一些陷阱-我想我记得在使用xx-xx-xxxx表示法时,它倾向于假设一个欧洲DD-MM-YYYY日期-但总而言之,使用它可能比使用正则表达式要好得多。

票数 5
EN

Stack Overflow用户

发布于 2010-07-05 20:15:54

虽然Pekka的答案更好地解决了你的问题,但我认为值得回答你问题的这一部分:

那么我该如何在这里使用回溯呢?

下面是匹配"05-07-2010“和"05/07/2010",但不匹配”05-07/2010“的regex示例:

代码语言:javascript
复制
"#^\d{2}([/-])\d{2}\1\d{4}$#"
        ------     --

正则表达式中最重要的部分加了下划线;这里的\1是对第一个捕获子模式([/-])的反向引用。你可以在PHP手册的Back references章节中获得更多信息。

票数 1
EN

Stack Overflow用户

发布于 2010-07-05 18:38:28

您拥有的正则表达式似乎会检查字符串是否为日期时间可以采用的任何可能的格式。如果您只想检查给定示例30/04/2010,您可以使用这个简单的示例

(\d{1,2})/(\d{1,2})/(\d{2,4})

(日、月1-2位,年份2-4位)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3178711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档