Next: , Previous: , Up: 検索と置換   [Contents][Index]


16.7 正規表現でのバックスラッシュ

多くの場合、任意の文字を伴う‘\’はその文字だけに一致します。しかしいくつか例外があって、‘\’で始まる2文字のシーケンスが、特別な意味を持つ場合があります。シーケンス内の2文字目にくる文字は、単独で使った場合には普通の文字として扱われるものです。以下は‘\’の構成の表です。

\|

選択肢を指定します。2つの正規表現abの間に‘\|’を記述すると、それはaまたはbのいずれかにマッチする表現を形成します。これはまずaとのマッチを試み、失敗した場合にbとのマッチを試みます。

したがって‘foo\|bar’は、‘foo’または‘bar’のいずれかにマッチし、それ以外の文字列にはマッチしません。

\|’は、周囲の一番大きな表現に適用されます。‘\|’のグループ化の能力に制限をかけることができるのは、周囲の‘\( … \)’によるグループ化だけです。

複数の‘\|’使用を処理するための、完全なバックトラッキング能力が存在します。

\( … \)

3つの目的のためのグループ化構成です:

  1. 他の操作に使うために、一連の選択肢‘\|’を括ります。したがって‘\(foo\|bar\)x’は、‘foox’または‘barx’のいずれかにマッチします。
  2. 接尾演算子‘*’、‘+’、‘?’を適用できるように、複雑な正規表現を括ります。したがって‘ba\(na\)*’は、‘bananana’のように、(0個以上の)文字列‘na’にマッチします。
  3. あとで参照できるように、マッチした部分文字列を記録します。

この最後の使い方は、カッコでグループ化することが重要なのではありません。これは‘\\( … \\)構成の、2番目の意味とは異なる機能です。実際には、これら2つの機能が衝突することは、通常はありません。もし衝突するようなら、以下で説明する、shy(内気)なグループ化を使うことができます。

\(?: … \)

マッチした部分文字列を記録しない、shy(内気)なグループ化を指定します。マッチした部分文字列は、‘\d’により後方参照できません(以下参照)。この機能は正規表現を機械的にまとめるときに役立ちます。これにより後方参照するためのグループにたいする番号づけに影響することなく、文法的な目的によるグループ化を行うことができます。

\d

d番目に‘\( … \)’構成にマッチしたテキストと同じテキストにマッチします。これは後方参照(back reference)と呼ばれます。

最後の‘\( … \)’構成の後で、マッチ処理はこの構成にマッチしたテキストの最初と最後を記録します。そして正規表現の後の部分で‘\’の後に数字dを使うことにより、d番目の‘\( … \)’構成にマッチしたテキストと同じテキストにマッチさせることができます。

正規表現に記述された最初の9つの‘\( … \)’にマッチしたテキストは、正規表現で開きカッコが出現した順に、1から9までの数字が割り当てられます。そのため‘\1’から‘\9’を使うことにより、‘\( … \)’構成にマッチした、対応するテキストを参照することができます。

たとえば‘\(.*\)\1’は改行を含まない、前半と後半が同一の文字列にマッチします。‘\(.*\)’は、そのテキストが何であろうと前半にマッチしますが、‘\1’は前半と正確に同じテキストにマッチしなければなりません。

もし特定の‘\( … \)’構成が1回以上マッチする場合(これは‘*’が後置されているとき簡単に発生します)、最後のマッチだけが記録されます。

\{m\}

これはm回の繰り返しを指定する接尾演算子です。つまり前置される正規表現に、正確にm回連続でマッチしなければなりません。たとえば‘x\{4\}’は、文字列‘xxxx’だけにマッチします。

\{m,n\}

これはm回からn回の繰り返しを指定する接尾演算子です。つまり前置される正規表現が最低m回、最大n回マッチしなければなりません。nが省略されたときはマッチ回数の上限はありませんが、前置される正規表現は少なくともm回マッチしなければなりません。
\{0,1\}’は‘?’と同じです。
\{0,\}’は‘*’と同じです.
\{1,\}’は‘+’と同じです。

\`

空の文字列にマッチしますが、文字列またはバッファー(またはアクセスできる部分)の先頭に限定されます。

\'

空の文字列にマッチしますが、文字列またはバッファー(またはアクセスできる部分)の最後に限定されます。

\=

空の文字列にマッチしますが、ポイント位置に限定されます。

\b

空の文字列にマッチしますが単語の先頭または最後に限定されます。したがって‘\bfoo\b’は、区切られた単語‘foo’にマッチします。‘\bballs?\b’は、別々の単語‘ball’または‘balls’にマッチします。

\b’は、そこにどんなテキストが出現しようと、バッファーの先頭または最後にもマッチします。

\B

空の文字列にマッチしますが、単語の最初と最後以外にマッチします。

\<

空の文字列にマッチしますが、単語の先頭に限定されます。‘\<’は単語の構成文字が続く場合に限り、バッファーの先頭にマッチします。

\>

空の文字列にマッチしますが、単語の最後に限定されます。‘\<’は内容が単語の構成文字で終わる場合に限りバッファーの最後にマッチします。

\w

任意の単語構成文字にマッチします。どの文字が該当するかは、構文テーブル(syntax table)により決定されます。Syntax Tables in The Emacs Lisp Reference Manualを参照してください。

\W

単語構成文字以外の任意の文字にマッチします。

\_<

空の文字列にマッチしますが、シンボルの先頭に限られます。シンボルは1文字以上のシンボル構成文字からなります。シンボル構成文字は、‘w’と‘_’の構文をもつ文字です。‘\_<’はシンボル構成文字が続く場合に限り、バッファーの先頭にもマッチします。単語にたいしては、構文テーブル(syntax table)が、どの文字がシンボル構成文字かを判断します。

\_>

空の文字列にマッチしますが、シンボルの最後に限定されます。‘\_>’は内容がシンボル構成文字で終わる場合に限り、バッファーの最後にマッチします。

\sc

構文がcである、任意の文字にマッチします。ここでcとは、特定の構文クラスを表す文字です。したがって‘w’は単語構成文字、‘-’または‘ ’は空白文字、‘.’は通常の区切り文字、などとなります。Syntax Class Table in The Emacs Lisp Reference Manualを参照してください。

\Sc

構文がc以外の、任意の文字にマッチします。

\cc

カテゴリーcに属する、任意の文字にマッチします。たとえば‘\cc’は中国文字、‘\cg’はギリシャ文字にマッチします。既知のカテゴリーについての説明は、M-x describe-categories RETをタイプしてください。

\Cc

カテゴリーc属さない、任意の文字にマッチします。

単語と構文に関係する構成は構文テーブルのセッティングにより制御されます。See Syntax Tables in The Emacs Lisp Reference Manual.