我偶然发现了以下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 个,那么我们就匹配。