我需要解析一堆遵循类似格式的单行文本:
这是我需要解析[link [filename2 | path_to_file2]]的示例实例[link [filename1 | path_to_file1]]。这是另一个[link [filename3 | path_to_file3]]等等[link [filename4 | path_to_file4]]
我希望在|
符号之前和之后的每个文本都使用正则表达式。
我有以下正则表达式:
while ( my @row = $sth->fetchrow_array() ) {
my $line = $row[4];
if($line =~ /\[link\[(.*?)\|(.*?)\]?\]/g){
print "MATCH1: $1\n";
print "MATCH2: $2\n";
}
}
不幸的是,它只会返回第一个实例(filename1
,path_to_file1
)。如何更改它以便捕获所有实例?
我想要以下输出:
MATCH1:filename1
MATCH2:path_to_file1
MATCH1:filename2
MATCH2:path_to_file2
MATCH1:filename3
MATCH2:path_to_file3
MATCH1:filename4
MATCH2:path_to_file4
答案 0 :(得分:0)
在列表上下文中使用regexp匹配:
while ( my @row = $sth->fetchrow_array() ) {
my $line = $row[4];
my @captures = $line =~ /\[link\[(.*?)\|(.*?)\]?\]/g;
while(@captures){
my $filename = shift @captures;
my $path = shift @captures;
print "MATCH1: $filename\n";
print "MATCH2: $captures\n";
}
}