1. ホーム
  2. Web プログラミング
  3. 正規表現

linux 正規表現 grep 解析例

2022-01-18 18:34:15

多くの技術分野(自然言語処理、データストレージなど)では、正規表現を使えば簡単に欲しい情報を抽出できるので、正規表現は非常に重要な知識ポイントです!(※)。

I. コンセプト

正規表現とは、特定の文字列にマッチするように文字列のセットの特性を記述するために使用されるパターンです。特殊文字と通常の文字でパターンを記述することで、テキストマッチングを実現するツールです。

正規表現は現在、様々なテキストエディタ/テキスト処理ツールに組み込まれている

II. 応用シーン

(1)バリデーション。フォームを送信する際に、ユーザー名とパスワードのバリデーションを行う。

(2) 検索:大量の情報の中から、指定した内容を素早く抽出し、URLの一括検索を行います。

(3) 置き換える。指定された書式のテキストを通常検索で照合し、見つかったら特定のものに置き換える。

III. 基本要素

(1)キャラクタークラス

(2)番号修飾子

(3)位置修飾子

(4) 特殊記号

注:正規表現は基本的に言語に依存しない、言語・ツールと正規表現を組み合わせてテキスト処理を行うことができる、後のブログでは、grepを使って検証する。(grepはLinuxで行単位でテキストをマッチングするツールで、以下のように、よく使う2つのオプションを作る)

-E: 拡張された規則性で一致させる

--color: マッチしたコンテンツの構文強調表示

1. 文字クラス

画像

例としては、以下のようなものがあります。

例1.


注:1. grep は greedy matching を使用し、現在の行にあるすべてのマッチにマッチします。

2. echo $? は、マッチングが成功したかどうかを示します(成功した場合は0、失敗した場合は1)。

例2.


例3.


例4.


例5.


2. 数量修飾子


例としては、以下のようなものがあります。

例1.


例2.


このことから、「直前のセル」のデフォルトは「?」または「+」の前の文字であることがわかる。

例3.


例4.


例5.


例6.


注:この結果はマッチングに失敗したもので、ドキュメントには表示されないので、エラーまたは非推奨の使用法であるべきです。

例7.


3. ポジション予選


例としては、以下のようなものがあります。

例1.


例2.


例3.


例4.


例5.


例6.


4. 特殊記号


例としては、以下のようなものがあります。


Eオプションを削除するとどうなりますか?

画像

この時点で、-Eオプションを外した後の通常のレギュラーマッチングが行われていないことが簡単にわかりますが、この現象には次の2つの概念を導入する必要があります!

5. 基本正規表現と拡張正規表現

相違点 拡張正規表現(拡張仕様)と基本正規表現(基本仕様)の下では、一部の文字 は通常の文字として解釈されるべきであり、上記の特別な意味を表現するために"˶‾‾‾"エスケープ文字が必要です。逆に、Extended仕様では は特別な意味と解釈し、そのリテラル値を取って"˶‾‾‾"でエスケープします。

このように、grepツールに-Eオプションをつけると拡張レギュラーがマッチングに使われ、このオプションをつけないとベースレギュラーがマッチングに使われることになります。

上記の問題に対して、次のような例を挙げる。

例1.


例2:対象文字列自体に 画像 文字を正規にマッチさせるには、次のようにします。


例3.


5. その他の一般的な文字セットとその置き換え

画像

一例として


まとめると、正規表現には以下の3つの分類があります。

(1) 基本的な正規表現。基本的なすなわちBPE

(2) 拡張された正規表現。拡張された正規表現:ERE

(3) Perlの正規表現。PREs

したがって、grep コマンドの後に何も引数を付けない場合は BRE、-E の場合は ERE、-P の場合は PRE を使用することを意味します。

IV. 貪欲モードと非貪欲モード

1. 貪欲モード:正規表現にマッチする場合、条件を満たすコンテンツにできるだけ多くマッチしようとする

例は以下の通りです。


注:grep のデフォルトは greedy matching で、テスト結果に干渉する可能性があります。"regular online conversion tool" を使ってオンラインでテストすることができます。

2. ノングリーディモード。正規表現をマッチングする際、できるだけ少ない数のマッチングを行う、つまり、マッチングを見つけたら、すぐにマッチングに成功し、マッチングを続けない(gがなければ、次のマッチングのセットを開く)。

例を挙げると、次のようになります。


V. ゼロワイドアサーション

1. いわゆるアサーションは、真であるべき事実を宣言するために使用されます。正規表現では、アサーションが真である場合にのみマッチングが続行されます。

2.ゼロ幅アサーション:コンテンツの前後にあるものを探すときに使うようなもので、「 \b, ^, $ 」などの特殊文字を使って、ある条件を満たすべき位置を指定します。

3. 分類

(1) ゼロ幅正予測事前アサーション(? =exp)

例えば、"ing "で終わる単語の最初の部分(ingで終わる部分以外)にマッチすることを意味する "ing+"(? ="ing")という式がある。I'm singing while you're dancing. "を探している場合、singとdancの両方にマッチする。

例は以下の通りです。


(2)ゼロ幅正回帰性事後アサーション(?)

例えば、(? <= \w+b )はreで始まる単語の後半部分(erを除く)にマッチし、例えば、「本を読む」を探す場合、adingにマッチします。

例としては、以下のようなものがあります。


VI. 簡単な練習

1. 携帯電話番号

画像

2. 0でない正の整数


3. 小数点以下2桁までの数字で、ゼロから始まらない数字


4. 数字と26文字で構成される文字列


5. QQ番号、10000から始まる


6. IPアドレス

\d+\. \d+\. \d+\. \d+

7. アカウントが正規のものであるかどうかを判断する {{/