我想要一个正则表达式来匹配一个单词,该单词中至少有3个由辅音分隔的元音。例如, general和overflow 之类的单词会匹配。以下是我提出的但是没有用。
/ ([^aeiou])([aeiou])\g1\g2\g1\g2\w*/
答案 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
$