正規表現について

概要

正規表現とは、文字列の集合を一つの文字列で表す方法の一つであり、特に強い制約がかかったものを指す。
この制約とは、文字のANDやORなどである。

一覧

文字概説備考
.任意の1文字に一致するメタ文字実際のピリオドを検索するにはエスケープが必要
*先行要素の0個以上のインスタンスに一致する量指定子例: BA*B, BA, BAAなどに一致
?先行要素の0個または1個のインスタンスに一致する量指定子例: BA?BまたはBAに一致
\d10進数(0~9)に一致する例: \dは任意の数字に一致
\D10進数ではない文字に一致する例: \Dは数字以外の任意の文字に一致
\s空白文字に一致する例: \sはスペース、タブ、改行などの空白文字に一致
\S空白文字ではない文字に一致する例: \Sは空白以外の任意の文字に一致
\w「単語」文字(a~z、A~Z、アンダースコア(_)、または10進数)に一致する例: \wは単語文字に一致
\W単語の文字ではない文字に一致する例: \Wは単語文字以外の任意の文字に一致
\b単語の境界に一致する例: \bは単語の先頭または末尾に一致
\B単語の境界ではない位置に一致する例: \Bは単語の先頭または末尾以外の任意の位置に一致

このテーブルは、正規表現で使用される基本的なメタ文字とその意味を簡潔にまとめたものです。正規表現を使用する際には、これらのメタ文字を適切に理解し、適切に使用することが重要です。

例と解説

初歩

以下に正規表現の例を示す。
これは、bから始まりkで終わる3桁以上の文字列を検索するものである。

b.+k

一文字ずつ解説していくと、

  • b : 文字列がbで始まること
  • . : 任意の一文字が存在すること
  • + : 直前のパターンが一回以上繰り返されていること
  • k : 文字列がkで終わること

そしてこの正規表現にマッチするものとして、babcdekb123kなどが挙げられる。

少し難しい例

例えば、以下のログのような文字列を取得したいとする。

2014-08-26 app[web.1]: 50.0.134.125 - - [26/Aug/2014 00:27:41] "GET / HTTP/1.1" 200 14 0.0005

このテキストから抽出したい情報は、日付(2014-08-26)、アプリケーション名(app)、プロセスID(web.1)、そしてログメッセージ(50.0.134.125 - - [26/Aug/2014 00:27:41] "GET / HTTP/1.1" 200 14 0.0005)とする。

対する正規表現は以下の通りとなる。

[12]\d{3}-[01]\d-[0-3]\d ([^ \[]*?)\[([^\]]*?)\]:.*
  • [12]\d{3}-[01]\d-[0-3]\d:日付を表す部分で、年が2000年から2099年までの範囲であることを確認する。
  • ([^ \[]*?):アプリケーション名を抽出する部分で、スペースや開き括弧[が出現するまでの任意の文字を非貪欲にマッチする。
  • \[([^\]]*?)\]:プロセスIDを抽出する部分で、開き括弧[と閉じ括弧]の間の任意の文字を非貪欲にマッチする。
  • :.*:コロン:の後に続く任意の文字をマッチする。