给定一个字符串,如果我从组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";
}
}
有谁能告诉我为什么这不能正常工作?
答案 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]*$/'