gpt4 book ai didi

perl - 在 foreach 循环中使用全局修饰符从 perl 正则表达式中提取匹配项

转载 作者:行者123 更新时间:2023-12-02 04:25:35 26 4
gpt4 key购买 nike

我正在尝试使用全局修饰符从字符串中提取匹配的部分。

考虑:

my $a="A B C";
my $b="A B C";

foreach ($a =~ /(\w)/g) {
print "$1\n";
}
while ($b =~ /(\w)/g) {
print "$1\n";
}

输出:

C
C
C
A
B
C

我很困惑;为什么 while 循环可以工作,而 foreach 循环却不能? (它打印 C 三次)。

最佳答案

简而言之:将第一个循环的主体更改为打印“$_\n”

当全局正则表达式匹配用作列表时,它的计算结果为所有捕获的列表(此处:qw(A B C))。 foreach 循环遍历此列表,并依次将 $_ 设置为每个项目。但是,$1 指向最后一次(成功)匹配的第一个捕获组。由于匹配列表是在循环开始之前生成的,因此这将始终指向最后一个匹配。

当全局正则表达式匹配在 while 中用作迭代器时,它会匹配正则表达式,如果成功执行循环体,则重试。由于当时仅生成一个匹配项,因此 $1 始终引用当前匹配项中的第一个捕获组。

关于perl - 在 foreach 循环中使用全局修饰符从 perl 正则表达式中提取匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22424375/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com