如何在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
相关产品推荐
相关产品推荐

