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

Making regex for preg_match greedy to only accept certain values?

我有一个 CSV 文件,其中有一个字符串条目表示 time/dates,如下所示:

20190816T16:10:10

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

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

任何人都可以建议如何更改它以确保此正则表达式匹配我试图实现的结构吗?

此正则表达式应与您的结构匹配:

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

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

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

Demo

您可以使用范围(例如:[0-9]),非捕获组用于小时(分钟) &秒很容易匹配):

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