我想只匹配只有一个元音的字符串。
我尝试了这段代码,它可以运行,但它也匹配那些没有元音的字符串(例如hshs
,ksks
,lslsl
),我只需要字符串只有一个元音
if ( $string !~ /\*w[aeiou]\w*[aeiou]\W*/ ) {
print $string;
}
答案 0 :(得分:2)
您可以使用tr///
来计算字符串中字母的出现次数。
这样的事可能
use strict;
use warnings;
for my $string ( qw/ a fare is paid for every cab /) {
if ( $string =~ tr/aeiuoAEIOU// == 1 ) {
print $string, "\n";
}
}
<强>输出强>
a
is
for
cab
答案 1 :(得分:1)
简单,至少一个元音:
if ($string =~ /[aeiou]/i) {
print $string;
}
正好是一个元音:
if ($string =~ /^[^aeiou]*[aeiou][^aeiou]*$/i) {
print $string;
}