このすみ技術ろぐ

とあるWebエンジニアが、技術や趣味について書くブログです。

正規表現における括弧の3つの役割

現在は「詳説 正規表現」を読んでいる途中なのですが、その中で気になっているのが括弧です。

正規表現における括弧では、主に3つの役割があります。

  1. 選択(|で連結すれば、正規表現の中で「または」を表現できる)
  2. グループ化(量指定子の繰り返し指定を、グループ化された単位で行える)
  3. キャプチャ(マッチした文字を記憶する)

選択としての括弧

選択としての括弧は、主に「または(つまりOR)」となる条件をグループ化します。

#!/usr/bin/perl

$word = "abc123";
## abcのあとに、def または 123が続く
$word =~ m/abc(def|123)/;

グループ化としての括弧

グループ化としての括弧は量指定子と組み合わせて、グループ化されたものの登場回数を指定できます。

#!/usr/bin/perl

$word = "abcdefdefdef";
## abcのあとに、「def」という文字列が1回以上続く
$word =~ m/abc(def)+/;

キャプチャとしての括弧

キャプチャとしての括弧は、マッチしたものを覚える目的で使います。

$word = "abcdefghij";
## defにマッチした場合、それを記憶する
$word =~ m/abc(def)/;
warn $1;

読んでいて気になっていること

読んでいて気になったことは、正規表現の動きにはプログラミング言語によって方言があることです。

egrepの場合、システムによって「\<」と「\>」が単語境界の前と後を示します。 しかしながら、この方式を採用しているかどうかは、正規表現の実装によってマチマチです。

正規表現は汎用性の高い規則を覚えた上で、それぞれのプログラミング言語でリファレンスを参照して、メタ文字等を参照してから使い始めるのが良さそうです。

詳説 正規表現 第3版

詳説 正規表現 第3版