这匹配具有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
将匹配。
答案 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就是你想要的。