我需要一个匹配以下时间的正则表达式模式:
- 09:15:42
- 上午09:15:42(或上午、下午或下午)
- 09:15
- 上午09:15(或上午、下午或下午)
以下是我到目前为止所拥有的,但它并没有使秒成为可选的:
'~^(0[0-9]|1[0-2]):([0-5][0-9])(:[0-5][0-9])'h*?([ap]m)$~i'
代码为:
$pattern = '~^(0[0-9]|1[0-2]):([0-5][0-9])(:[0-5][0-9])'h*?([ap]m)$~i';
return preg_match($pattern, $time);
感谢
您需要在最后两组之后放置一个可选的量词?
。
~^(0[0-9]|1[0-2]):([0-5][0-9])(:[0-5][0-9])?'h*([ap]m)?$~i
但是,如果您想获取每组的匹配结果,而不是验证字符串,那么上面的内容将捕获第三组中的冒号。您可以使用以下表达式来简化和修复行为。
~^(0'd|1[0-2]):([0-5]'d)(?::((?2)))?'h*([ap]m)?$~i
实时演示