PHP正则表达式匹配各种hh:mm:ss视频持续时间

时间:2017-02-24 18:51:30

标签: php regex preg-match

当给出小时值时,我无法获得正则表达式匹配。如何获得可能的小时匹配(有或没有前导零)?

$val = '01:04:06'; // doesn't match
$val = '1:04:06'; // doesn't match
$val = '04:06'; // matches
$val = '4:06'; // matches

preg_match("/^([\d]{1,2})\:([\d]{2})$/", $val, $matches);

3 个答案:

答案 0 :(得分:1)

只需删除潜在客户^

即可

如果您需要分钟和秒数,可以将正则表达式重写为/(\d?\d):(\d?\d)$/

如果您想要(可选)小时,请改为编写/((\d?\d):)?(\d?\d):(\d?\d)$/

答案 1 :(得分:0)

如果你想将它作为一个整体匹配,只需为第一个序列创建一个组,直到:,并添加一个量词,这样可能会发生1到2次。

/^(([\d]{1,2})\:){1,2}([\d]{2})$/

Test it here

答案 2 :(得分:0)

这是来自类似stackoverflow post的另一个,但转换为preg_match:

preg_match("/^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$/", $val, $matches);