正規表現とgrepとegrep

正規表現とgrepとegrep

誰かが次の表現の意味を説明できますかgrep?これはどう違いますかegrep

そしてgrep

  1. ^[0-9]\+$
  2. [0-9]\{3\}.*[0-9]\{3\}
  3. ^.*[0-9]$

そしてegrep

  1. ^[0-9]{7}$
  2. ^.*$

ベストアンサー1

egrepgrep1970年代後半から、Unix V7の新しい実装として新しい正規表現エンジンと構文を使用しました(awkV7もリリースされ、//使用された構文の代わりに同じ新しい拡張正規表現(ERE)構文を使用しましたgrep)。それ以来、POSIXはコマンド機能をオプションにマージし、廃止されました。edsedegrepgrep-Eegrep

最近、一部のシステムでは、まだ使用するように更新されていないスクリプトとの下位互換性のために同様のことを行う -scriptegrepのみです。shexec grep -E "$@"grep -E

$ cat /usr/bin/egrep
#!/bin/sh
exec grep -E "$@"

したがって、egrep全くgrep -E違いはありません。


^ライン開始アンカーに使用され、それに応じて$ライン終了アンカーにも使用されます。
これは、[0-9]ロケールの0〜9の範囲内の照合順序要素と一致します。以前は 0123456789 のみが含まれていましたが、システムやロケールに応じてさらに含めることができます。
これは{min,Max}既知の間隔式です。
これは.*、ゼロ個以上の文字で構成されるシーケンスと一致します。

ERE (例: egrep/ ) には、 、 、 、 など、awkいくつかの新しい演算子が導入され、逆参照サポートが削除されます。+?|

BREのグループ化演算子\(...\)(で使用されるデフォルトの正規表現grep)は(...)EREにあります。

正規表現には最初は間隔演算子はありませんでした。 BREでは最初に追加されましたが、\{x,y\}EREでは追加されませんでした。これは、以前のバージョンとの互換性が損なわれるためです。これは{x,y}90年代にEREを指定したPOSIXによって変更されました。今日までこれをサポートしていないegrepいくつかの実装がまだあります。awk

GNU実装grep(およびBREを使用するその他のユーティリティ)はさらに一歩進み、BREに、、+ERE?演算子を追加し、非標準一貫性拡張としてERE()を使用する逆参照をサポートするため、これらの実装ではBREとEREは次のようになります。 。機能的には同じですが、構文が異なります。|\+\?\|grep -E

また、見ることができます私の正規表現がXでは動作しますが、Yでは動作しないのはなぜですか?

ここにあります。https://www.regular-expressions.info/posix.html#breまた、ERE/BREなどに関する非常に良い情報も見つけました。

私もhereでこの正規表現の比較を見つけました。https://www.regular-expressions.info/refrepeat.htmlとても便利です。次のように4つを組み合わせてください。

特徴 通事論 説明する                                                                   はい GNUブレイ グヌエレ POSIX BRE POSIX ERE
貪欲な数量者 ? (疑問符) 前の項目をオプションにします。欲が多いので可能であれば選択項目もマッチに含めてください。 アルファベット? abcまたはabと一致 いいえ はい いいえ はい
貪欲な数量者 前の項目をオプションにします。欲が多いので可能であれば選択項目もマッチに含めてください。 アルファベット? abcまたはabと一致 はい いいえ いいえ いいえ
貪欲な数量者 *(スター) 前の項目を0回以上繰り返します。 Greedy は、前の項目がまったく一致しないまで、前の項目と少ない順列を一致させようとする前に、できるだけ多くの項目を一致させます。 ".*" は abc "def" "ghi" jkl の "def" "ghi" と一致します。 はい はい はい はい
貪欲な数量者 +(プラス記号) 前の項目を1回以上繰り返します。貪欲なので、前のアイテムが一度だけ一致するまで、以前のアイテムとより少ない一致で順列を試みる前に、できるだけ多くのアイテムを一致させます。 ".+" は abc "def" "ghi" jkl の "def" "ghi" と一致します。 いいえ はい いいえ はい
貪欲な数量者 + 前の項目を1回以上繰り返します。貪欲なので、前のアイテムが一度だけ一致するまで、以前のアイテムとより少ない一致で順列を試みる前に、できるだけ多くのアイテムを一致させます。 ".+" は abc "def" "ghi" jkl の "def" "ghi" と一致します。 はい いいえ いいえ いいえ
固定数量子 {n} ここで、nは整数> = 1です。 前の項目を正確にn回繰り返します。 a{3}はaaaと一致します。 いいえ はい いいえ はい
貪欲な数量者 {n,m} ここで n >= 0 で m >= n 前の項目をn〜m回繰り返します。貪欲なので、繰り返し回数をnに減らす前にm回繰り返してみてください。 a{2,4}はaaaa、aaa、またはaaと一致します。 いいえ はい いいえ はい
貪欲な数量者 {n,} ここで n >= 0 前の項目をn回以上繰り返します。貪欲なので、前のアイテムの数が少ない一致で順列を試みる前に、前のアイテムがn回だけ一致するまで、できるだけ多くのアイテムを一致させます。 a{2,} は aaaaa の aaaaa と一致します。 いいえ はい いいえ はい
貪欲な数量者 {,m} ここで m >= 1 前の項目を0〜m回繰り返します。欲が多いので、繰り返し回数を0に減らす前にm回繰り返してみてください。 a{,4} は aaaa、aaa、aa、a、または空の文字列と一致します。 いいえ はい いいえ いいえ
固定数量子 {n} ここで、nは整数> = 1です。 前の項目を正確にn回繰り返します。 a{3}はaaaと一致します。 はい いいえ はい いいえ
貪欲な数量者 {n,m} ここで n >= 0 で m >= n 前の項目をn〜m回繰り返します。貪欲なので、繰り返し回数をnに減らす前にm回繰り返してみてください。 a{2,4}はaaaa、aaa、またはaaと一致します。 はい いいえ はい いいえ
貪欲な数量者 {n,} ここで n >= 0 前の項目をn回以上繰り返します。貪欲なので、前のアイテムの数が少ない一致で順列を試みる前に、前のアイテムがn回だけ一致するまで、できるだけ多くのアイテムを一致させます。 a{2,} は aaaaa の aaaaa と一致します。 はい いいえ はい いいえ
貪欲な数量者 {,m} ここで m >= 1 前の項目を0〜m回繰り返します。欲が多いので、繰り返し回数を0に減らす前にm回繰り返してみてください。 a{,4} は aaaa、aaa、aa、a、または空の文字列と一致します。 はい いいえ いいえ いいえ

おすすめ記事