Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 匹配元音和辅音的perl正则表达式_Regex_Perl - Fatal编程技术网

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

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

我想要一个正则表达式来匹配一个单词,其中至少有3个元音,由辅音分隔。例如,像general和overflow这样的词将匹配。下面是我想到的,但它不起作用

    / ([^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
$