我有一个以 hh:mm:ss 格式包含一次或多次的字符串。我创建了这个正则表达式来尝试通过分组来节省时间,这样我就可以做一些工作:
if ( $s =~ /(.*)(\d{2}:\d{2}:\d{2})(.*)(\d{2}:\d{2}:\d{2})(.*)(\d{2}:\d{2}:\d{2})(.*)/ )
{
my @t = ( $2, $5, $8 );
# loop through times and do stuff
}
else
{
# no match found
}
问题是字符串可能有一个、两个或三个嵌入时间——而且这个正则表达式似乎只在三个都存在时才有效(不是一两个)。有没有更好的方法来做到这一点(并避免任何“使用未初始化的值”警告!)?
我试过这个,但它只抓住了最后一次:
/(.*)(\d{2}:\d{2}:\d{2})(.*)(\d{2}:\d{2}:\d{2})?(.*)(\d{2}:\d{2}:\d{2})?(.*)/