使preg_match贪婪的正则表达式只接受某些值?

时间:2018-08-20 15:28:58

标签: php regex date datetime preg-match

我有一个CSV文件,其中包含一个表示时间/日期的字符串,如下所示:

20190816T16:10:10

我为preg_match创建了以下正则表达式,但希望将小时/分钟和秒设置为仅允许某些数字(例如,小时将是24小时制,因此仅接受00-23,而分钟和秒仅接受00- 59)

/\d{8}[A-Z]\d{2}:\d{2}:\d{2}/

有人可以建议如何更改此设置,以确保此正则表达式与我要实现的结构相匹配吗?

3 个答案:

答案 0 :(得分:3)

您需要修改模式以匹配构成这些范围的基础字符串:

/\d{8}[A-Z](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]/

Demo

答案 1 :(得分:1)

此正则表达式应符合您的结构:

\d{8}[A-Z]([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]

答案 2 :(得分:1)

您可以将范围(例如:[0-9])与非捕获组一起使用小时(分钟和秒很容易匹配):

//            00 to 23       00 to 59
/\d{8}[A-Z](?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d/