理解egrep表达式

理解egrep表达式

我偶然发现了以下egrep表达式:

egrep '^([^aieou]*[aieou]){5,7}[^aieou]*$' /usr/share/dict/words

在本页面:http://matt.might.net/articles/sculpting-text

该表达式应该查找包含 5 到 7 个元音的单词。

我从行的开头理解第一个 ^ 的含义,第二个 ^ 否定任何 aieou 后跟任意数量的字符以及 5 到 7 次之间的 aeiou 之一。但我不明白第一个和最后一个表达式如何:[^aieou]

答案1

它查找零个或多个辅音 ( [^aieou]*),后跟 5 到 7 个元音 ( ([aieou]){5,7}),后跟零个或多个辅音 ( [^aieou]*)。整个正则表达式锚定到行的开头 ( ^) 和结尾 ( $)。

例子

$ egrep '^([^aieou]*[aieou]){5,7}[^aieou]*$' \
        /usr/share/dict/words | head -10
abacinate
abacination
abacterial
abaisance
abalation
abalienate
abalienated
abalienating
abalienation
abandonable

细节

因此,当它匹配第一个单词 时abacinate,第一个字母 a 左侧有 0 个辅音,因此我们匹配该部分。

由于在左侧和/或右侧发现具有零个或多个辅音的附加元音,我们也匹配这些情况。如果我们找到 5 到 7 个,那么我们就匹配。

相关内容