在不改变 $1 的情况下设置变量以在 while 循环中捕获组
Setting variable to capture group in while loop without altering $1
假设您正在浏览一个包含多次出现的相似字符串的字符串。例如。我们正在字符串 brabenanabeiabsenab
中寻找 ab
。然后我可以使用 while 循环遍历所有这些匹配项,并使用 $1 来获取匹配项。
while ('brabenanabeiabsenab' =~ /ab/g) {
my ($a) = =~ /a/; # a
my ($b) = =~ /b/; # {empty}
}
所以,当做这样的操作时,</code> 被简化为匹配本身,显然 <code>b
将不再匹配。使这项工作正确的方法是什么?请注意,这是一种简化:实际上我确实需要正则表达式和一个 while 循环。
while ('brabenanabeiabsenab' =~ /(ab)/g) {
my $match = ;
my ($a) = $match =~ /(a)/;
my ($b) = $match =~ /(b)/;
...
}
这种情况下,你也可以这样做
while ('brabenanabeiabsenab' =~ /(a)(b)/g) {
my $a = ;
my $b = ;
...
}
当然,如果内存没问题,
for ('brabenanabeiabsenab' =~ /ab/g) {
my ($a) = /(a)/;
my ($b) = /(b)/;
...
}
假设您正在浏览一个包含多次出现的相似字符串的字符串。例如。我们正在字符串 brabenanabeiabsenab
中寻找 ab
。然后我可以使用 while 循环遍历所有这些匹配项,并使用 $1 来获取匹配项。
while ('brabenanabeiabsenab' =~ /ab/g) {
my ($a) = =~ /a/; # a
my ($b) = =~ /b/; # {empty}
}
所以,当做这样的操作时,</code> 被简化为匹配本身,显然 <code>b
将不再匹配。使这项工作正确的方法是什么?请注意,这是一种简化:实际上我确实需要正则表达式和一个 while 循环。
while ('brabenanabeiabsenab' =~ /(ab)/g) {
my $match = ;
my ($a) = $match =~ /(a)/;
my ($b) = $match =~ /(b)/;
...
}
这种情况下,你也可以这样做
while ('brabenanabeiabsenab' =~ /(a)(b)/g) {
my $a = ;
my $b = ;
...
}
当然,如果内存没问题,
for ('brabenanabeiabsenab' =~ /ab/g) {
my ($a) = /(a)/;
my ($b) = /(b)/;
...
}