正規表現のメタ文字について

Linuxサーバの管理を行っていると、正規表現をよく使います。vimエディタの検索でも使うし、procmailの設定でも正規表現を使います。また、Linuxのfindコマンドを使ってファイル検索するときにも正規表現を使います。この正規表現で使うメタ文字についてまとめます。

スポンサーリンク




正規表現で使用するメタ文字について

正規表現で使用する特別な文字をメタ文字と呼びます。種類は以下の通りです。

メタ文字 内容
. なんでもいい1文字を表します。
^ 行の先頭を表します。
$ 行の最後を表します。
* 直前の文字が無いか、1個以上ある場合の繰り返しを表します。
+ 直前の文字が1個以上ある場合の繰り返しを表します。
? 直前の文字が無いか、1個だけある場合を表します。
[] []で囲まれた範囲の文字を表します。
| このメタ文字で区切られた文字列のいずれかを表します。
() ()内の文字列を1つのグループとしてまるで1文字のように表します。

これらの文字は、正規表現では、特別なのでこのメタ文字自身を検索する場合には、次のように「\」を使用します。検索したいメタ文字の直前に「\」を付けます。

「\.」「\^」「\$」「\*」「\+」「\?」「\[」「\]」「\|」「\(」「\)」

「.」について

正規表現のメタ文字「.」は、なんでもよい1文字を表します。検索対象が、以下の場合を例に考えます。

  1. access-1.log
  2. access-2.log
  3. access-11.log
  4. access-12.log

このファイル名の中で、access-1.logとaccess-2.logを検索したい場合の正規表現は、「access-.\.log」となります。また、access-11.logとaccess-12.logを検索したい場合には、「access-..\.log」となります。

メタ文字「^」について

正規表現のメタ文字「^」は、行の先頭を表します。検索対象が以下のような場合を考えます。

  1. 明日の天気は、晴れです。
  2. 明日の天気は、雨です。
  3. 天気は、明日から曇りです。

「明日」で始まる行を検索する場合は、正規表現「^明日」で検索します。行頭を指定しているので3行目は、検索されません。

「$」について

正規表現のメタ文字「$」は、行の最後を表します。検索対象が以下のような場合を考えます。

  1. 今日は、良い天気
  2. 良い天気です。今日は
  3. 明日も、良い天気

正規表現「今日は$」で検索した場合、検索されるのは、2行目だけになります。1行目にも「今日は」という文字は含まれているのですが、行末でないために検索されません。

「*」について

正規表現のメタ文字「*」は、繰り返しを表します。「*」の直前の文字が、ない場合か、1個以上連続する場合を表します。検索対象が、以下のような場合を考えます。

  1. 12356
  2. 123456
  3. 123444456

正規表現「1234*56」で検索した場合、「12356」「123456」「1234444456」すべてを検索できます。

「+」について

正規表現のメタ文字「+」は、繰り返しを表します。「+」の直前の文字が、1個以上連続している場合を表します。検索対象が、以下のような場合を考えます。

  1. 12356
  2. 123456
  3. 123444456

正規表現「1234+56」で検索した場合、「123456」「123444456」を検索できます。

「?」について

正規表現のメタ文字「?」は、直前の文字がないか、1文字だけある場合を表しています。検索対象が、以下のような場合を考えます。

  1. AC
  2. ABC
  3. ABBC

正規表現「AB?C」で検索した場合、「AC」「ABC」が検索できます。

「[]」について

正規表現のメタ文字「[]」は、括弧内で指定された文字を1文字を表します。検索対象が、以下のような場合を考えます。

  1. access-1.log
  2. access-2.log
  3. access-3.log
  4. access-4.log

正規表現「access-[1-3]\.log」で検索した場合、「access-1.log」「access-2.log」「access-3.log」が検索できます。

正規表現「access-[134]\.log」で検索した場合、「access-1.log」「access-3.log」「access-4.log」が検索できます。

正規表現「access-[^1]\.log」で検索した場合、「access-2.log」「access-3.log」「access-4.log」が検索できます。「[]」内で「^」を使うと指定した文字は検索対象からはずされます。

正規表現「access-[^1-3]\.log」で検索した場合、「access-4.log」が検索できます。

「|」について

正規表現のメタ文字「|」は、このメタ文字で区切られた文字列のいずれかを表します。検索対象が、以下のような場合を考えます。

  1. ABC
  2. 123
  3. EFGH
  4. 4567

正規表現「ABC|123」で検索した場合、「ABC」「123」が検索できます。

「()」について

正規表現のメタ文字「()」は、括弧内の文字列を1文字と同じように扱います。検索対象が、以下のような場合を考えます。

  1. AB
  2. A12B
  3. A1212B
  4. A121212B

正規表現「A(12)+B」で検索した場合、「A12B」「A1212B」「A121212B」が検索できます。また次のような検索対象の場合を考えます。また、正規表現「A(12)*B」で検索した場合は、「AB」「A12B」「A1212B」「A121212B」が検索できます。

  1. AB123CD
  2. AB456CD
  3. AB789CD

正規表現「AB(123|456|789)CD」で検索した場合、「AB123CD」「AB456CD」「AB789CD」が検索できます。

スポンサーリンク







シェアする

  • このエントリーをはてなブックマークに追加

フォローする