从字符组中查找n次出现

时间:2014-10-10 20:13:15

标签: regex perl

给定一个字符串,如果我从组xyz中找到两个字符,我想打印“两个”。

jxyl打印两个

鉴于jxyzl没有打印

jxxl打印两个

我对perl很新,所以这是我的方法。

my $word = "jxyl";
@char = split //, $word;
my $size = $#char;

for ( $i = 0; $i < $size - 1; $i++ ) {
    if ( $char[i] eq "x" || $char[i] eq "y" || $char eq "z" ) {
        print "two";
    }
}

有谁能告诉我为什么这不能正常工作?

3 个答案:

答案 0 :(得分:4)

来自常见问题:

perldoc -q count

How can I count the number of occurrences of a substring within a string?

use warnings;
use strict;

while (<DATA>) {
    chomp;
    my $count = () = $_ =~ /[xyz]/g;
    print "$_ two\n" if $count == 2;
}    

__DATA__
jxyl
jxyzl
jxxl

输出:

jxyl two
jxxl two

答案 1 :(得分:4)

您基本上想要计算字符串中特定字符的数量。

您可以使用tr

#!/usr/bin/perl
use strict;
use warnings;

while (<DATA>) {
    chomp;
    my $count = $_ =~ tr/xyz//;
    print "$_ - $count\n";
}

__DATA__
jxyl
jxyzl
jxxl

输出:

jxyl - 2
jxyzl - 3
jxxl - 2

确定计数后是否确实有2个。

答案 2 :(得分:1)

绝对不是最好的方法,但这里有一个有趣的正则表达式,并表明有多种方法可以做。

perl -e'$word = "jxyl"; print "two" if $word =~ /^[^xyz]*[xyz][^xyz]*[xyz][^xyz]*$/'