为什么列表上下文中的替换不返回捕获列表?

时间:2014-09-05 23:33:30

标签: regex perl capture-group

根据perlop,在列表上下文中,具有捕获组和m//修饰符的正则表达式的匹配运算符/g将返回捕获列表:

my $str = "8a9b0c"; my @res = ($str =~ m/(\d)/g); print @res;

# Prints "8 9 0"

但是,我无法在perlopprelre找到替代运算符的原因 - 即使在列表上下文中 - 也会返回数字捕获:

my $str = "8a9b0c"; my @res = ($str =~ s/(\d)//g); print "@res\n"

prints "3"

为什么以及在哪里记录这种行为?

2 个答案:

答案 0 :(得分:4)

来自perlop

  

在字符串中搜索模式,如果找到,则用替换文本替换该模式,返回替换次数。

列表和标量上下文之间没有区别。所以它返回了覆盖的数量,然后将其分配给列表。这只是将数字转换为包含数字的列表。

答案 1 :(得分:2)

来自perlop

  
      
  • s/PATTERN/REPLACEMENT/msixpodualgcer

         

    在字符串中搜索模式,如果找到,则用替换文本替换该模式,返回替换次数。否则返回false(特别是空字符串)。

  •   

文档不提供像m//运算符那样的列表上下文的替代规范。