Perl的RegExp语法

时间:2010-11-22 10:54:13

标签: regex perl

您如何分解(或不分析)以下行?

if ($Hour =~ /^(\d{2})(\d{2})(\d{2})$/) { $result = "$1:$2:$3" }

4 个答案:

答案 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而不是$,除非你真的想要允许一个可选的尾随换行符。除此之外(和变量的大写不一致),没关系。