egrep 式の理解

egrep 式の理解

私は偶然に次のようなegrep表現を見つけました:

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

このページでは:http://matt.might.net/articles/sculpting-text

この式は5〜7個のコレクションを含む単語を見つける必要があります。

行の先頭から最初の^の意味を理解します。 2番目の^は、aieouの後のすべての文字数と5〜7の間のaeiouの1つを無効にします。しかし、最初の表現と最後の表現がどんなものか理解できません。[^aieou]

答え1

[^aieou]*0個以上の子音()、5〜7個の母音(([aieou]){5,7})、0個以上の子音()を探します[^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の左側にゼロの子音があるので、その部分を一致させます。

子音がゼロ以上の母音が左側および/または右側にさらに見つかるため、これらの場合も一致します。 5から7を見つけると一致するものです。

関連情報