You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Perl 6中统计正则表达式的匹配次数?

Perl 6中获取非重叠子串匹配次数的方法

嘿,刚好我对Perl 6的正则处理比较熟,来给你讲讲怎么实现类似Perl 5的这个功能~

在Perl 6里,你有几种简洁的方式可以拿到字符串中非重叠子串的匹配次数:

  • 使用.match方法:
    Perl 6的正则匹配更偏向面向对象的写法,你可以调用字符串的.match方法,加上:g(全局匹配)参数,然后通过.elems获取匹配结果的数量:

    my $text = "thing1 thing2 thing3";
    my $count = $text.match(/thing/, :g).elems;
    say $count; # 输出3
    
  • 使用.comb方法:
    .comb方法专门用来把字符串拆分成符合指定模式的子串列表,直接取列表的长度就是匹配次数,非常直观:

    my $text = "thingabc thingdef";
    my $count = $text.comb(/thing/).elems;
    say $count; # 输出2
    
  • 模拟Perl 5的标量上下文写法:
    如果你想更贴近Perl 5那种标量上下文的感觉,可以用智能匹配操作符~~加上全局匹配修饰符:g,再用+强制转换为数值(也就是匹配次数):

    my $text = "thingthingthing";
    my $count = +($text ~~ m:g/thing/);
    say $count; # 输出3(因为是非重叠匹配)
    

需要注意的是,Perl 6里的全局正则默认就是非重叠的,和Perl 5的/g行为完全一致,所以这些方法都能准确得到你要的结果。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:55:23