我想要一个正则表达式来匹配一个至少有 3 个由辅音分隔的元音的单词。例如,general 和 overflow 之类的词会匹配。以下是我想出的,但它不起作用。
/ ([^aeiou])([aeiou])\g1\g2\g1\g2\w*/
\g1
aka\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
我建议使用这个:
$ 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
$