3

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

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

2 回答 2

4

\g1aka\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
于 2013-10-01T02:33:05.307 回答
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
$
于 2013-10-01T19:14:57.247 回答