perl正则表达式匹配元音和辅音

时间:2013-10-01 02:16:27

标签: regex perl

我想要一个正则表达式来匹配一个单词,该单词中至少有3个由辅音分隔的元音。例如, general和overflow 之类的单词会匹配。以下是我提出的但是没有用。

    / ([^aeiou])([aeiou])\g1\g2\g1\g2\w*/

2 个答案:

答案 0 :(得分:4)

\g1又名\1与捕获的内容相匹配。那么你所拥有的内容将匹配xoxoxo而不是xoxoxa

我只是使用

/[aeiou](?:[^aeiou]+[aeiou]){2}/

但如果你想避免重复,你可以选择。

my $vowel     = qr/[aeiou]/;
my $consonant = qr/[^aeiou]/;
/$vowel (?: $consonant+ $vowel ){2}/x

/
   (?&VOWEL) (?: (?&CONSONANT)+ (?&VOWEL) ){2}
   (?(DEFINE)
      (?<VOWEL>     [aeiou]  )
      (?<CONSONANT> [^aeiou] )
   )
/x

答案 1 :(得分:0)

我建议使用它:

$ echo 'general overflow of redundancy a#a#a, Xoxoxo!'|perl -ne 'print "$1\n" while
>  m/([a-z]*[aeiou](?:[b-df-hj-np-tv-z]+[aeiou]){2}[a-z]*)/ig'
general
overflow
redundancy
Xoxoxo
$

为了进行比较 - 以下是错误答案的行为示例:

$ echo 'general overflow of redundancy a#a#a, Xoxoxo!'|perl -ne 'print "$1\n"
>  while m/([aeiou](?:[^aeiou][aeiou]){2})/ig'
enera
a#a#a
oxoxo
$ echo 'general overflow of redundancy a#a#a, Xoxoxo!'|perl -ne 'print "$1\n"
>  while m/([aeiou](?:[^aeiou]+[aeiou]){2})/ig'
enera
overflo
of redu
ancy a#a
a, Xoxo
$