Perl遍历每场比赛

时间:2011-09-28 08:08:49

标签: regex perl

假设我正在浏览一个原始html页面,正在寻找这个正则表达式。 (最后的引号是有意的)。

m/(https?:\/\/.*?(?:'|"))/

此模式可能匹配~100次。什么是常见的perl习语/迭代所有捕获组匹配列表的快速方法?

3 个答案:

答案 0 :(得分:56)

来自perlretut(非常精细的教程)

while ($x =~ /(\w+)/g) {
        print "Word is $1, ends at position ", pos $x, "\n";
    }

您可以将whileg修饰符一起使用来迭代所有匹配项,$1您可以获得捕获组1的内容,在此示例中,您可以从教程中获取获得pos的位置。

答案 1 :(得分:7)

全局匹配“g”修饰符返回列表上下文中捕获的匹配项列表:

say $_ for $str =~ /un($wanted)/g;    # Prints only $wanted

答案 2 :(得分:0)

@Zahid:我认为你的方法更紧凑。希望以下代码片段有助于理解您的示例

my $str = 'file_%date%_%name%_%lang%.txt';
my @ts = $str =~ /%([\w]+)%/g;#           <----------Zahid said
print join(", ", @ts);

输出:

date, name, lang