Perl正则表达式匹配元音

时间:2011-06-04 00:09:34

标签: regex perl pattern-matching

  

可能重复:
  Regex to match vowels in order as they appear once

这匹配具有a e i o u

的字词
foreach $v(@lines)
{
    if(($v =~ /a/) && ($v =~ /e/) && ($v =~ /i/) && ($v =~ /o/) && ($v =~ /u/))
    {
        print $v;
    }
}

如何制作它只是按照a e i o u的顺序匹配?例如,单词abstemious将匹配。

2 个答案:

答案 0 :(得分:4)

$v =~/a.*e.*i.*o.*u/

应该做的伎俩。

答案 1 :(得分:4)

“更好”的正则表达式可能是:

foreach (@lines) {
    print $_ . "\n" if /\b[^aeiou]*a[^aeiou]*e[^aeiou]*i[^aeiou]*o[^aeiou]*u[^aeiou]*\b/i;
}

这可以保证每个元音只出现一次并按顺序排列。

  • \b表示字边界
  • [^aeiou]*表示任意数量的非元音。 N.B:这也将匹配非字母字符,如标点符号,数字,
  • i表示不区分大小写

也就是说,你会得到像“细菌”这样的词,而不是“胰十二指肠造口术”(其中所有的元音都以正确的顺序排列)。否则,Peter Tillemans' answer就是你想要的。