35.3.1.3 正規表現内のバッククラッシュ構文

ほとんどの場合では、‘\’の後の任意の文字はその文字だけにマッチします。しかし例外もいくつかあります。‘\’で始まる特定のシーケンスには、特別な意味をもつものがあります。以下は特別な‘\’構成要素のテーブルです。

\|

これは選択肢を指定する。2つの正規表現ab、その間にある‘\|’により、abのいずれかにマッチする表現が形成される。

つまり‘foo\|bar’は、‘foo’か‘bar’のいずれかにマッチして他の文字列にはマッチしない。

\|’は周囲の適用可能な最大の表現に適用される。‘\|’を取り囲む‘\( … \)’でグループ化することによりグループ化の効力を制限できる。

複数の‘\|’の処理するための完全なバックトラッキング互換が必要なら、POSIX正規表現関数を使用すること(Emacsの正規表現 vs POSIXの正規表現を参照)。

\{m\}

これは前のパターンを正確にm回繰り返す後置演算子。つまり‘x\{5\}’は文字列‘xxxxx’にマッチして、それ以外にはマッチしない。‘c[ad]\{3\}r’は‘caaar’、‘cdddr’、‘cadar’等にマッチする。

\{m,n\}

これは最小でm回、最大でn回繰り返すより一般的な後置演算子。m省略時の最小は0、n省略時の最大は存在しない。いずれの形式でもmnが指定された場合には、 2**16 − 1 より大きくなることはない。

たとえば‘c[ad]\{1,2\}r’は文字列‘car’、‘cdr’、‘caar’、‘cadr’、‘cdar’、‘cddr’にマッチして、それ以外にはマッチしない。
\{0,1\}’や‘\{,1\}’は‘?’と同じ。
\{0,\}’や‘\{,\}’は‘*’と同じ。
\{1,\}’は‘+’と同じ。

\( … \)

これは以下の3つの目的を果たす役目をもつグループ化構成要素:

  1. 他の操作のために一連の‘\|’選択肢を囲う。つまり正規表現‘\(foo\|bar\)x’は、‘foox’か‘barx’のいずれかにマッチする。
  2. 後置演算子‘*’、‘+’、‘?’による複雑な表現を囲う。つまり‘ba\(na\)*’は‘ba’、‘bana’、‘banana’、‘bananana’、...等の任意の数(0以上)の文字列‘na’にマッチする。
  3. \digit’ (以下参照)による将来の参照にたいして、マッチする部分文字列を記録する。

この最後の目的はカッコによるグループ化というアイデアによるものではない。これは同じ構成要素‘\( … \)’にたいする2つ目の目的に割当てられた別の機能だが、実際のところ2つの意味は衝突しない。しかし稀に衝突が発生することがあり、それが内気(shy)なグループの導入をもたらした。

\(?: … \)

これは内気なグループ(shy group)の構成要素。内気なグループは通常のグループの最初の2つの役目(他の演算子のネスト制御)を果たすが、これは番号を取得せず‘\digit’でその値を後方参照できない。内気なグループは通常の非内気なグループを変更することなく自動的に追加できるので、機械的に正規表現を構築するのに特に適している。

内気なグループ化は非キャプチャリング(non-capturing)番号なしグループ(unnumbered groups)とも呼ばれる。

\(?num: … \)

これは明示的番号付きグループ(explicitly numbered group)の構成要素。通常のグループ化では位置をもとに番号が暗黙で取得されるが、これが不便な場合もあるだろう。この構成要素により特定のグループに番号を強制できる。番号の付与に特別な制限はなく、複数のグループに同じ番号を付与でき、その場合は最後の1つ(もっとも右のマッチ)がマッチとして採用される。暗黙に番号付けされたグループは、常に前のグループより大きい最小の整数となる番号を取得する。

\digit

これはグループ構成要素(‘\( … \)’)のdigit番目にマッチしたテキストと同じテキストにマッチする。

言い換えると最後のグループの後に、マッチ処理はそのグループによりマッチされたテキストの開始と終了を記憶する。その正規表現の先の箇所で‘\’とその後にdigitを使用すれば、それが何であれ同じテキストにマッチさせることができる。

検索やマッチングを行う関数に渡される正規表現全体の中で、最初の9つのグループ化構成要素にマッチする文字列には、その正規表現内で開カッコが出現する順に1から9までの番号が割り当てられる。したがって‘\1’から‘\9’までを使用して、対応するグループ化構成要素によりマッチされたテキストを参照できる。

たとえば‘\(.*\)\1’は、一方がもう一方と等しいような2つの文字列から構成される、改行を含まない任意の文字列にマッチする。‘\(.*\)’は前半分にマッチし、これは何でもよいが、それに続く‘\1’はそれと同じテキストに正確にマッチしなければならない。

構成要素‘\( … \)’が2回以上マッチする場合(これはたとえば後に‘*’をしたがえるとき発生し得る)には最後のマッチだけが記録される。

正規表現内の特定のグループ化構成要素がマッチしなかった場合には、たとえばそれが使用されない選択肢内にあったり、回数が0回の繰り返しの内部にあるなら、それに対応する‘\digit’構文は何にもマッチしない。作為的な例を用いると‘\(foo\(b*\)\|lose\)\2’は‘lose’にマッチできない。外側のグループ内の2つ目の選択肢がマッチするが、‘\2’が未定義となり何にたいしてもマッチできない。しかし‘foobb’にたいしては、1つ目の選択肢が‘foob’にマッチして、‘\2’が‘b’にマッチするのでマッチが可能になる。

\w

これは任意の単語構成文字にマッチする。エディターの構文テーブルが、どの文字が単語構成文字かを決定する。構文テーブルを参照のこと。

\W

これは任意の非単語構成文字にマッチする。

\scode

これは構文がcodeであるような任意の文字にマッチする。ここでcodeは、構文コードを表す文字。‘w’は単語構成要素、‘-’は空白文字、‘(’は開カッコ、...等。空白文字構文を表すには、‘-’かスペース文字のいずれかを使用する。構文コードとそれらを意味する文字のリストは構文クラスのテーブルを参照のこと。

\Scode

これは構文がcodeでないような任意の文字にマッチする。

\ccode

これはカテゴリーがcodeであるような任意の文字にマッチする。ここでcodeはカテゴリーを表す文字。たとえば標準カテゴリーテーブルでは‘c’はChinese(中国語)、‘g’はGreek(ギリシャ語)の文字を表す。M-x describe-categories RETで現在定義済みの全カテゴリーのリストを確認できる。define-category関数を使用すれば、標準カテゴリーに加えて独自カテゴリーを定義することもできる(カテゴリーを参照)。

\Ccode

これはカテゴリーがcodeではない任意の文字にマッチする。

以下は空文字列にマッチします(つまり文字を何も消費しない)が、マッチするかどうかがコンテキストに依存するような正規表現を構築します。これらすべてにたいして、そのバッファーのアクセス可能範囲の先頭と終端は、あたかもそのバッファーの実際の先頭と終端のように扱われます。

\`

これは空文字列、ただしバッファー先頭またはマッチ対象の文字列の先頭だけにマッチする。

\'

これは空文字列、ただしバッファー終端またはマッチ対象の文字列の終端だけにマッチする。

\=

これは空文字列、ただしポイント位置だけにマッチする(この構成要素はマッチ対象が文字列なら定義されない)。

\b

これは空文字列、ただし単語の先頭だけにマッチする。つまり‘\bfoo\b’は個別の単語として出現する‘foo’だけにマッチする。‘\bballs?\b’は、個別の単語として‘ball’か‘balls’にマッチする。

\b’は、隣接するテキストが何であるかと無関係に、バッファー(か文字列)の先頭または終端にマッチする。

\B

これは空文字列、単語の先頭や終端、またはバッファー(か文字列)の先頭や終端以外にマッチする。

\<

これは空文字列、ただし単語の先頭だけにマッチする。‘\<’は後に単語構成文字が続く場合のみバッファー(か文字列)の先頭にマッチする。

\>

これは空文字列、ただし単語の終端だけにマッチする。‘\<’はコンテンツが単語構成文字で終わる場合のみバッファー(か文字列)の終端にマッチする。

\_<

これは空文字列、ただしシンボルの先頭だけにマッチする。シンボルとは1つ以上の単語かシンボル構成文字のシーケンス。‘\_<’は後にシンボル構成文字が続く場合のみバッファー(か文字列)の先頭にマッチする。

\_>

これは空文字列、ただし単語の終端だけにマッチする。‘\_>’はコンテンツがシンボル構成文字で終わる場合のみバッファー(か文字列)の終端にマッチする。

すべての文字列が、有効な正規表現な訳ではありません。たとえば終端の‘]’がないブラケット式の内側で終わる文字列は無効であり、単一の‘\’で終わる文字列も同様です。いずれかの検索関数にたいして無効な正規表現が渡されるとinvalid-regexpエラーがシグナルされます。


This page has generated for branch:work/emacs-30_69b16e5c63840479270d32f58daea923fe725b90, commit:5e3f74b56ff47b5bcef2526c70f53f749bbd45f6 to check Japanese translation.