next up previous contents
Next: Emacs Up: 文字列の検索 grep/egrep/fgrep Previous: 使用上の注意事項

正規表現

[]

正規表現は文字セットで記述されたパターンです。いくつかの短い演算子を用い て数式と同じような表現となります。

Grep は ``基本的な正規表現''と `拡張された正規表現''のどちらかを認 識します。デフォールトは基本的な正規表現です。GNU grepではどちらに も差はありませんが他のバージョンでは単純な正規表現となります。以下には拡 張された正規表現について述べます。そして,基本正規表現との差は後にまとめ ます。

正規表現の基本は一文字にマッチするブロックです。大部分の文字はその文字自 身にマッチします。特別な意味を持つメタ文字はバックスラッシュで前置されま す。

[]で囲んだ文字のリストはリストの中の文字の1文字とマッチ します。リストの先頭の文字がキャレット` $\hat{}$ 'の場合にはリストの文 字以外にマッチします。例えば,正規表現[0123456789]は数 文字1文字にマッチします。アスキー文字の範囲では,最初の文字と最後の文字 をハイフンで結んで指定できます。正規表現[A-Z]は英大文字1文字にマッ チします。

よく用いる文字のリストは定義済みであり,

[:alnum:](英数字[0-9A-Za-z]),
[:alpha:](英字[A-Za-z]),
[:cntrl:](制御文字[\000-\037\177]),
[:digit:](数字[0-9]),
[:graph:](グラフ文字[\041-\176]),
[:lower:](英小文字[a-z]),
[:print:](印刷可能文字[\040-\176]),
[:punct:](記号),
[:space:](空白文字[ \t\n\r\v\f]),
[:upper:](英大文字[A-Z]),
[:xdigit:](16進数字[0-9A-Fa-f])
があります。

例えば, [[:alnum:]][0-9A-Za-z]が ASCII エンコードに依存す るに対してエンコードに依存しないということを除いて同じ意味を持ちます。 そのため前者の方が移植性があります。(文字クラスに入れた角括弧は閉じ括弧 で[[A-Za-z]のように文字クラスとなります。)文字のリストの中ではほ とんどの文字は特別な意味を失います。リストを閉じる記号 ] を文字と するにはリストの最初におきます。同じように否定記号を文字とするには ^ は文字リストの最初以外の場所におきます。文字グループを示す文字 を文字とするには-は最後に おきます。

ピリオド . はどんな1文字にもマッチします。記号\w[[:alnum:]]と同じ意味であり,\W[^[:alnum]]と同じ意味を持ちます。

キャレット ^ とドル記号 $ はそれぞれ行の先頭と最後を 示すメタ文字である。また,文字\<\>は単語 の始めと終りで ある。\b は単語の前後の空白文字にマッ チし,\B は単語の前後以外の場所の空白文字にマッチし ます。一文字にマッチする正規 表現に続いて繰り返しを示す次のような 文字が続きます。

? 1文字前があるか,1度マッチする。
* 前のパターンと0回以上マッチする。
+ 前のパターンと1回以上マッチする。
{n} 前のパターンとn回マッチする。
{n,} 前のパターンとn回以上マッチする。
{,m} 前のパターンと最大m回マッチする。
{n,m} 前のパターンとn以上,最大m回マッチする。

2つの正規表現をつなげるとそれぞれの正規表現にマッチする文字の接合となり ます。

2つの正規表現を|つなげるとどちらかの正規表現にマッチする文 字となります。

正規表現を続けて,その上に繰り返し演算を行うときは中括弧でこれらのルール をまとめます。

バックスラッシュで前置された数字\nは その前に括弧で括られた正規表現のn番目の内容となる。



Kishimoto Ken
平成20年3月1日