您如何分解(或不分析)以下行?
if ($Hour =~ /^(\d{2})(\d{2})(\d{2})$/) { $result = "$1:$2:$3" }
答案 0 :(得分:3)
对我来说看起来很不错。
如果需要,您可以将每个{2}
替换为另一个\d
。
你可以使用$result=join":",$Hour=~/^(\d\d)/g
,但它不是那么严格 - 它会匹配一行开头的任何偶数长度的数字字符串。
答案 1 :(得分:3)
首先,除非您想匹配所有Unicode数字字符(例如?或᠕),否则请勿使用\d
。如果要匹配0到9,则必须说[0-9]
。
不幸的是,你无法将其缩短为
if ($Hour =~ /^([0-9]{2}){3}$/) { $result = "$1:$2:$3" }
因为你关心所有的比赛而且只会保存最后一场比赛。同样
if ($Hour =~ /^([0-9]{6})$/) { $result = "$1:$2:$3" }
出局了。你可以说
($result = $Hour) =~ s/([0-9]{2})(?!$)/$1:/g;
但是你的交易清晰度会略微缩短。
答案 2 :(得分:1)
看起来不错。匹配时间可以采取各种严格程度。
以上内容允许999999
匹配24小时制的另一种方法是使用
([01]?[4-9]|[012]?[0-3])
表示小时部分,然后是
[0-5][0-9]
分钟。
或(为了它的乐趣),小时部分也可以使用
进行匹配([01]?[0-9]|2[0-3])
答案 3 :(得分:1)
我会使用\z
而不是$
,除非你真的想要允许一个可选的尾随换行符。除此之外(和变量的大写不一致),没关系。