2011-09-28 69 views
31

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

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

这种模式可能匹配~100次。什么是常见的perl习惯用法/快速方法遍历所有捕获组匹配的列表?

回答

49

perlretut(很细的教程)

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

您可以同时使用whileg修饰符来遍历所有的比赛,与$1你得到捕获组1的含量,并在此从教程的例子中,您也可以获得pos的位置。

+1

感谢STEMA为recommanding perlretut:它是在Perl的正则表达式的真棒页;它涵盖了从初学者到高级的所有内容。 –

+0

如果处理多行字符串和锚点,请不要忘记添加'm'修饰符^,$ –

6

整体匹配“g”修改返回列表上下文中获取匹配的列表:

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

@Zahid:我觉得你的做法是更紧凑。希望下面的代码片段将有助于了解您的例子

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

输出:

date, name, lang