1

次の 3 つの正規表現の違いを理解したいと思います。

小文字のアルファベットのみで構成されるファイルのすべての行を表示したかったのです。

私が試した3つの正規表現は次のとおりです。

cat filename.txt | grep ^[a-z]*

正規表現の説明:これにより、0 個以上の小文字で始まるすべての行が表示されます。したがって、次のいずれかに一致します。

zapato
113078
OLIVIA

正確には、私たちが望んでいたものではありません。

cat filename.txt | grep ^[a-z]*$

正規表現の説明:これにより、0 個以上の小文字で始まり、行末までのすべての行が表示されます。これは次のものと一致します。

fubuki
BALLIN
Kristine

今回は、数字を含む結果はありませんでした。

cat filename.txt | grep ^[a-z]*[a-z]$

正規表現の説明:これは私にとってはうまくいきます。0 個以上の小文字で始まるすべての行を検索し、別の小文字が見つかるまで一致させます。何らかの理由で、これは私にとってはうまくいきます。ただ、これが今までの正規表現とどう違うのか知りたいです。

tonia
ecurby
totonno

また、正規表現のアスタリスク ( ) が 0 以上を意味する場合、^[az] と書くとすべての結果が含まれます。

4

1 に答える 1

4

正規表現の簡単な説明:

^[a-z]*

から0文字以上で始まる文字列に一致します[a-z]空の文字列と、setの文字で始まるすべての文字列に
一致します。[a-z]


^[a-z]*$

からの0文字以上を含む文字列に一致します[a-z]空の文字列と、setの文字のみを含むすべての文字列に
一致します。[a-z]


^[a-z]*[a-z]$

から0文字以上で始まり、その後に。[a-z]から最後の1文字だけが続く文字列に一致します[a-z]。setの文字のみを含むすべての空でない
文字列に 一致します。[a-z]


現在の3番目のオプションの代わりにこれを使用してください:

^[a-z]+$

意味的には同等ですが、より単純です。

x*x(または)は、正規表現(任意の式)xx*と同等です。後者は基本的に、前者のより冗長な表現のいずれかに対する単なる構文糖衣です。 x+x

言い換えると、 0以上*意味し、 1以上を意味します。+


于 2012-06-24T19:03:59.703 に答える