即使可能进行多次匹配,Perl正则表达式也只返回列表上下文中的一个值

Tit*_*lli 4 regex perl

我正在使用这种perl正则表达式:

/(^.*)XXX/g
Run Code Online (Sandbox Code Playgroud)

我希望这个正则表达式匹配该类型的文本

******XXX****XXX***XXX
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下,正则表达式将匹配3次并提供以下结果:

******XXX****XXX***
******XXX****
******
Run Code Online (Sandbox Code Playgroud)

但是,当我把这个正则表达式放在这样的列表上下文中时

while($_=~/(^.*)XXX/g)
Run Code Online (Sandbox Code Playgroud)

只有一场比赛,而且是

******XXX****XXX***
Run Code Online (Sandbox Code Playgroud)

我哪里错了?

Pat*_* B. 6

你需要改变你的循环:

$_ = "******XXX****XXX***XXX";
while(/(.*)XXX/) {
    print $1,"\n";
    $_=$1;
}
Run Code Online (Sandbox Code Playgroud)

匹配的结果是在$1您匹配的变量时找到的$_.