kyoneco’s blog

教育、数学、統計といったテーマについて考えていきます

詳説 正規表現 第一章 読書メモ

テキスト検索や置換など正規表現は有用ですが、言語である以上慣れや習熟が必要です。

詳説 正規表現 第3版. Jeffrey E.F. Friedl 著、株式会社ロングテール/長尾 高弘 訳

を教科書として正規表現の理解を深めるべく読書メモを残しながら読んでみたいと思います。

 

正規表現 1章 正規表現入門

・言語としての正規表現

正規表現:パターン言語 (パターン:型、類型、 規則性を持った様式・体系、繰り返されるようす)
*:任意のものにマッチ
?:任意の1文字にマッチ

 

・言語との類似点


正規表現リテラルを単語、メタ文字を文法とする言語
メタ文字:特殊な意味をもつ文字(*など)
リテラル:その他の文字

正規表現という思考の枠組み

正規表現:小さなブロックのような単位を積み重ねて、組み立てる

 

・ファイルからのテキストの検索


egrep:正規表現が利用できるソフトウェア MAC Unixなど
コマンド:egrep [正規表現] [検索対象のファイル]
egrepは対象をみつけたら行全体を表示する

 

・egrepのメタ文字


行頭:^  意味:行頭がある場合、その次の文字と一致する行にマッチする
行末:$
^$:行が行頭をもつ場合、その次に行末が続くならマッチする。空行にマッチ。

 

・文字クラス


[]:複数の文字のどれか1つとマッチさせる.ex. [ab],[0-9],[Ss]mith
ダッシュ(ー)がメタ文字になるのは文字クラスの中だけ。

 

・否定文字クラス


[^]:リストに含まれていない任意の文字にマッチ。ex [^1-6] →789にマッチ

・任意の文字にマッチするドット
. :任意の文字にマッチする文字クラス ex.03.19.76 →03/19/76,03-19-76,03.19/76にマッチ

 

・選択 選択肢


| :またはという意味のメタ文字。複数の部分表現のどれかにマッチさせる ex.^(From|Subject|Date):
括弧によって範囲を限定させる

 

・大文字と小文字の違いを無視する


-i :大文字と小文字を区別しないマッチ
egrep -i [正規表現] [対象ファイル]

 

・単語の境界 単語版の^ $に対応


\< :語の先頭の位置にマッチ
\>:語の末尾の位置にマッチ
\<cat\> :単語の先頭の位置をみつけることができその次にcatと続きその次に単語の終わりの位置が続いたらマッチする。catという単語をさがせということ。

 

・オプション 量指定子


?:あってもなくてももよいという意味。ex colou?r →uがあってもなくてもマッチする 4(th)?

 

・繰り返し その他の量指定子


量指定子:くっついている要素の繰り返しの方法を指示するもの
+:直前の要素の1回以上の繰り返し
*:直前の要素の0回を含む繰り返し

 

・範囲指定繰り返し制御


{mini,max}:繰り返しの最小限と最大限を指定するメタ文字列 ex [a-zA-Z]{1,5}

 

・括弧と後方参照


括弧はその中の部分式にマッチしたテキストを覚えられるようになっている
1個の単語全般にマッチしたあとでさらに同じものにもう1回マッチしたかを検証したいときに役立つ
\1 :後方参照 括弧はその中の部分式がマッチしたテキストを覚えており、\1はそれに対応する
\<the the \> → 一般化 \<([A-Za-z]) + \1\>

 

エスケープ 


\ :メタ文字をエスケープするとメタ文字の特殊な意味は失われリテラル文字として扱われる

 

 

メモ

まずは言語として正規表現を捉えたときに、文字にあたるものと文法について第一章でまとめられています。基礎を発展させるの節では実例も挙げられていて、前半で整理された文法的知識がどのように実際に利用できるかが例示されています。メタ文字のまとめに挙げられている15項目を運用するのが正規表現の文法にあたるところです。これをどのように組み合わせてつかっていくかというのが肝になるでしょう。