よくあるジャンルと正規表現での特徴

現在、正規表現には主に POSIX フレーバーと PCRE フレーバーの 2 つのフレーバーがあります。

1.POSIXジャンル

POSIX 仕様では、正規表現に関する 2 つの標準が定義されています。

  • BRE 標準 (Basic Regular Express 基本正規表現);
  • ERE 標準 (Extended Regular Expression) 拡張正規表現。

現在、私たちが使用しているほとんどの Linux ディストリビューションには GNU パッケージが統合されています。GNU は POSIX 標準を実装する際に、主に次の 3 つの拡張機能を含むいくつかの拡張機能を作成しました。

  1. GNU BRE は + と ? をサポートしますが、これらはエスケープされた場合にのみ特別な意味を持ちます。つまり、\+ と \? で表す必要があります。
  2. GNU BRE は、パイプ文字の複数選択分岐構造をサポートしていますが、これもエスケープする必要があります (\| で表されます)。
  3. GNU ERE は、BRE と同様に、\1、\2...\9 で表される後方参照の使用もサポートしています。

背景の薄黄色は BRE と ERE の違いで、水色の 3 つのフォントは GNU 拡張機能です。

POSIX ジャンルには特別な場所もあります。つまり、POSIX 文字グループと呼ばれる独自の文字グループがあります。これは、以前に学習した \d は数字、\s は空白などを意味するものと似ています。POSIX では一連の文字グループも定義されています。具体的なリストと説明は次のとおりです。

 2.PCREジャンル

現在、一般的に使用されているプログラミング言語のほとんどは PCRE 標準から派生したものですが、この流派の注目すべき特徴は、\d、\w、\s などの文字グループの省略形です。

PCREジャンルはPerl正規表現と互換性がありますが、直接的な互換性、間接的な互換性を含め、さまざまな言語やツール間での互換性の程度には依然として差があります。Perl 言語の正規表現は常に改良およびアップグレードされており、他の言語やツールがそれらをリアルタイムで追跡して更新することは不可能です。

  • 直接互換性。PCRE ファミリの言語またはツールで、Perl 正規表現と直接互換性があります。例えば、Perl、PHP preg、PCREライブラリなどを総称してPerlシリーズと呼びます。
  • Java シリーズ (Java、Groovy、Scala などを含む)、Python シリーズ (Python2 および Python3 を含む)、JavaScript シリーズ (ネイティブ JavaScript および拡張ライブラリ XRegExp を含む)、.Net シリーズ (C#、VB.Net を含む) などの間接的な互換性、など)、など。

3. Linux での正規表現の使用

POSIX 仕様に準拠した UNIX/LINUX システムでは、grep、sed、vi/vim などが BRE 標準に従って実装され、egrep、awk などが ERE 標準に従って実装されます。

UNIX/LINUX システムにおける PCRE フレーバーと POSIX フレーバーの比較。

 実際、grep や sed など、同時に複数の正規化標準と互換性のあるツールがいくつかあります。-E オプションを追加すると ERE 規格が使用され、-P オプションを追加すると PCRE 規格が使用されます。

使用 ERE 标准
grep -E '[[:digit:]]+' access.log

使用 PCRE 标准
grep -P '\d+' access.log

man grep を実行すると、オプション -G が BRE 標準 (デフォルト) の使用を指定し、-E が ERE 標準、-P が PCRE 標準であることがわかります。したがって、特定のツールを使用する場合、この方法でコマンドの説明を確認できます。

この記事は8月のDay24の学習メモです 内容はGeek Timeの「正規表現入門」です お勧めの講座です。

おすすめ

転載: blog.csdn.net/key_3_feng/article/details/132484029