正则表达式按元音出现一次的顺序匹配

Ste*_*ris 0 regex perl

我试图找出一个正确的正则表达式来匹配单词中出现的元音。单词中可以有任意数量的辅音;但是,除了上面列出的 5 个元音之外,应该没有其他元音。例如,单词“sacrilegious”不应匹配,因为尽管它包含按字母顺序排列的五个元音,但在“a”和“e”之间还有一个额外的“i”元音。不允许使用连字符。事实上,您的正则表达式不应匹配任何包含大写和小写字母以外的任何字符的“单词”。

这里有一些它应该匹配的词

abstemious
facetious
arsenious
acheilous
anemious
caesious
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我想出的,但是当我运行程序时,它似乎没有做它应该做的事情。

#!/usr/bin/perl -w
use strict;


my $test =  "abstemious";

if( $test =~ /a[^eiou]*e[^aiou]*i[^aeou]*o[^aeiu]u/ )
{

    print "yes";

}
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 6

你有一个小错字,试试这个:

/a[^eiou]*e[^aiou]*i[^aeou]*o[^aeio]*u/
Run Code Online (Sandbox Code Playgroud)

  • 这也匹配诸如“unabstemious”、带连字符的词和诸如“an evil out”之类的词组。 (2认同)