假设我正在浏览一个原始html页面,正在寻找这个正则表达式。 (最后的引号是有意的)。
m/(https?:\/\/.*?(?:'|"))/
此模式可能匹配~100次。什么是常见的perl习语/迭代所有捕获组匹配列表的快速方法?
答案 0 :(得分:56)
来自perlretut(非常精细的教程)
while ($x =~ /(\w+)/g) {
print "Word is $1, ends at position ", pos $x, "\n";
}
您可以将while
与g
修饰符一起使用来迭代所有匹配项,$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