解析持续时间字符串

Parse duration time string

我想解析像

这样的持续时间字符串

1h30m40s56m12s

在 PHP 中。我尝试以下 Regexp

^(\d+)h(\d+)m(\d+)s$

但它不适用于 56m12s 这样的字符串。 我怎样才能让小时数可选?

使用 ? 出现零次或一次。正则表达式的其他部分不需要括号:

^(\d+h)?\d+m\d+s$

您可以在给定的子模式周围放置一个 optional 非捕获组。

^(?:(\d+)h)?(\d+)m(\d+)s$

如果您只是想验证这些字符串,您可以删除不需要的捕获组。

^(?:\d+h)?\d+m\d+s$