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

Jam*_*mes 1 php regex datetime date delimiter

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

例如,30/04/2010是正确的但是30-04/2010是不正确的.

我用Google搜索并发现了一些关于回溯的内容,但我不太确定如何使用它.例如,如果我有这个正则表达式:

(?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}))

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

非常感谢你.

Pek*_*ica 5

不是你的问题的答案,但你考虑使用strtotime()?

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

Feb 2, 2010
February 2, 2010
02/02/10
4 weeks ago
Next Monday
Run Code Online (Sandbox Code Playgroud)

如果日期不可解析,则该函数将返回false(或-1在PHP 5.1之前).

有一些陷阱 - 我想我记得在使用xx-xx-xxxx符号时,它往往假设一个欧洲DD-MM-YYYY日期 - 但总而言之,你可能会比使用正则表达式更好.