【问题标题】:PHP regex to match various hh:mm:ss video durationsPHP 正则表达式匹配各种 hh:mm:ss 视频持续时间
【发布时间】:2017-02-24 18:51:30
【问题描述】:

当给定小时值时,我无法获得正则表达式匹配。我怎样才能得到一个可能的小时来匹配(带或不带前导零)?

$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);

【问题讨论】:

  • 试试:/^(\d{1,2}):\d{1,2}(?:\d{1,2})?$/

标签: php regex preg-match


【解决方案1】:

只需删除前导^

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

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

【讨论】:

  • 您在测试中忘记了« $ »。
  • 是的,对不起,我的错。
【解决方案2】:

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

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

Test it here

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-11-25
      • 1970-01-01
      • 2019-10-15
      • 1970-01-01
      • 2021-01-23
      • 2020-08-06
      • 1970-01-01
      • 2016-02-24
      • 1970-01-01
      相关资源
      最近更新 更多