Regex 匹配元音和辅音的perl正则表达式
我想要一个正则表达式来匹配一个单词,其中至少有3个元音,由辅音分隔。例如,像general和overflow这样的词将匹配。下面是我想到的,但它不起作用Regex 匹配元音和辅音的perl正则表达式,regex,perl,Regex,Perl,我想要一个正则表达式来匹配一个单词,其中至少有3个元音,由辅音分隔。例如,像general和overflow这样的词将匹配。下面是我想到的,但它不起作用 / ([^aeiou])([aeiou])\g1\g2\g1\g2\w*/ \g1aka\1与捕获的内容匹配。因此,您所拥有的将匹配xoxo,但不匹配xoxoxa 我只想用 /[aeiou](?:[^aeiou]+[aeiou]){2}/ 但是如果你想避免重复,你有选择 my $vowel = qr/[aeiou]/; my
/ ([^aeiou])([aeiou])\g1\g2\g1\g2\w*/
\g1
aka\1
与捕获的内容匹配。因此,您所拥有的将匹配xoxo
,但不匹配xoxoxa
我只想用
/[aeiou](?:[^aeiou]+[aeiou]){2}/
但是如果你想避免重复,你有选择
my $vowel = qr/[aeiou]/;
my $consonant = qr/[^aeiou]/;
/$vowel (?: $consonant+ $vowel ){2}/x
/
(?&元音)(?:(?&辅音)+(?&元音)){2}
(?(定义)
(?[aeiou])
(?[^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
$
@NigoroJr,谢谢,不过我整理了编辑。使用
?
是没有意义的,而且+
不属于辅音的定义范围。这不是一个很好的元音定义(例如,“天真”、“无”)或辅音定义(例如包括连字符)。
$ 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
$