Regex 只匹配一个元音的单词

Regex 只匹配一个元音的单词,regex,perl,Regex,Perl,我只想匹配只有一个元音的字符串 我尝试了这个代码,它可以工作,但它也匹配那些没有任何元音的字符串(例如hshs,ksks,lslsl),我只需要只有一个元音的字符串 if ( $string !~ /\*w[aeiou]\w*[aeiou]\W*/ ) { print $string; } 简单一点,至少有一个元音: if ($string =~ /[aeiou]/i) { print $string; } if ($string =~ /^[^aeiou]*[aeiou][^a

我只想匹配只有一个元音的字符串

我尝试了这个代码,它可以工作,但它也匹配那些没有任何元音的字符串(例如
hshs
ksks
lslsl
),我只需要只有一个元音的字符串

if ( $string !~ /\*w[aeiou]\w*[aeiou]\W*/ ) {
   print $string;
}

简单一点,至少有一个元音:

if ($string =~ /[aeiou]/i) {
   print $string;
}
if ($string =~ /^[^aeiou]*[aeiou][^aeiou]*$/i) {
   print $string;
}
只有一个元音:

if ($string =~ /[aeiou]/i) {
   print $string;
}
if ($string =~ /^[^aeiou]*[aeiou][^aeiou]*$/i) {
   print $string;
}

简单一点,至少有一个元音:

if ($string =~ /[aeiou]/i) {
   print $string;
}
if ($string =~ /^[^aeiou]*[aeiou][^aeiou]*$/i) {
   print $string;
}
只有一个元音:

if ($string =~ /[aeiou]/i) {
   print $string;
}
if ($string =~ /^[^aeiou]*[aeiou][^aeiou]*$/i) {
   print $string;
}

简单一点,至少有一个元音:

if ($string =~ /[aeiou]/i) {
   print $string;
}
if ($string =~ /^[^aeiou]*[aeiou][^aeiou]*$/i) {
   print $string;
}
只有一个元音:

if ($string =~ /[aeiou]/i) {
   print $string;
}
if ($string =~ /^[^aeiou]*[aeiou][^aeiou]*$/i) {
   print $string;
}

简单一点,至少有一个元音:

if ($string =~ /[aeiou]/i) {
   print $string;
}
if ($string =~ /^[^aeiou]*[aeiou][^aeiou]*$/i) {
   print $string;
}
只有一个元音:

if ($string =~ /[aeiou]/i) {
   print $string;
}
if ($string =~ /^[^aeiou]*[aeiou][^aeiou]*$/i) {
   print $string;
}

您可以使用
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

您可以使用
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

您可以使用
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

您可以使用
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