Go to the first, previous, next, last section, table of contents.

正規表現のシンタックス

正規表現は、"その中のいくつかの文字が特別な構成要素であり、それ以外のものは通 常の文字である" というシンタックスを持っています。通常の文字は、(その文字には マッチし、それ以外のものにはマッチしない) 単純な正規表現です。特別な文字は `$', `^', `.', `*', `+', `[', `]', `\' で、特別な文字が(新たに)定義されること はありません。 (正規表現中の)この外の文字は(全て)`\' がその前に置かれない限 り、通常の文字となります。

例えば、`f' は特別な文字ではありません。これは通常の文字です。`f' は、ストリン グ `f' にマッチし、その他のものにはマッチしない正規表現です(これはストリング `ff' にはマッチしません)。同様に、`o' は `o' のみにマッチする正規表現です。

(それがどのようなものであっても) 2 つの正規表現 a と b を繋げる(訳注: concatenate)ことができます。 a と b を繋いだ結果は、a がストリングの頭の部分に マッチし、b がストリングの残りの部分にマッチする場合、そのストリングにマッチす る正規表現になります。

簡単な例として、正規表現 `f' と `o' を繋げ、正規表現 `fo' を得ることができま す。これはストリング `fo' にマッチします。 (ここまでは)まだあたりまえの話です が、何かあたりまえでないことを行なうためには、特別な文字を用いる必要がありま す。以下にそれらのリストを示します。

 .(ピリオド)
      は、ニューラインを除く(どんな) 1文字にもマッチする特別な文字です。連結
      (concatenation) を用いることで、(`a' で始まり `b' で終るどのような 3
      文字のストリングにもマッチする)`a.b' のような正規表現を作ることができ
      ます。

*

      は、これだけでは構成要素になりません。これは (その)前にある正規表現を
      可能なだけ繰り返すことを意味するサフィックスです。`fo*' における `*'
      は `o' に適用されるため、`fo*' は複数の `o' が 1 つの `f' の後ろに続く
      ものにマッチします。 0 回の `o' の場合も許されます。`fo*' は `f' に
      マッチします。
       `*' は常にその前にある最も小さな(可能な) expression に適用されます。
      このため `fo*' は `o' を繰り返しますが `fo' を繰り返すわけではありませ
      ん。
      マッチを行なうものは(できる限り)繰り返しマッチするように `*' 要素を処
      理します。その後、パターンの残りの部分の処理を続けます。それが失敗した
      場合、 (そうすることで残りの部分をマッチさせることができる場合) `*' の
      (修飾)要素にマッチしたもののいくつかをそこでのマッチから除く(訳注:
      discard) バックトラックを行ないます。 (例えば) ストリング `caaar' に
      `ca*ar' をマッチさせる場合、最初 `a*' を 3 つの a (全てに)マッチさせよ
      うとします。(しかし) 残りのパターンは `ar' であるのにマッチさせる対象
      として残されてあるのは `r' でしかないため、この試みは失敗します。(次
      の)代案は `a*' に対し 2 つだけ `a' をマッチさせることです。この選択に
      より、この正規表現の残りの部分のマッチングは成功します。

+

      "(前にある) expression が少なくとも 1回はマッチしなくてはいけない" と
      いう点を除き `*' に似たサフィックス文字です。このため、例えば `ca+r'
      はストリング `car' や `caaaar' にはマッチしますが、ストリング `ca' に
      はマッチしません。一方 `ca*r' はこの 3 つのストリング(全てに)マッチし
      ます。

?

      "(前にある) expression が 1回マッチするかマッチしなくてもよい" という
      点を除き `*' に似たサフィックス文字です。このため、例えば `ca?r' は
      `car' や `cr' にマッチしますがそれ以外のものにはマッチしません。
[ ... ]
       `[' は、(`]' でターミネートされる)文字集合を始めます。 (単純な場合)こ
      の間にある文字が文字集合を構成します。このため、`[ad]' は 1 つの `a'
      か 1 つの `d' にマッチし、`[ad]*' は `a' だけ (もしくは) `d' だけから
      なるストリング(empty ストリングも含む) にマッチします。これにより
      `c[ad]*r' は `cr', `car', `cdr', caddaar' 等にマッチすることになりま
      す。 (`-' を 2 つの文字の間に書くことで) 文字の集合に文字のレンジ(訳注
      : range)を含むことができます。`[a-z]' は、小文字(全て)にマッチします。
      レンジは、個々の文字とまじっていてかまいません。`[a-z$%.]' は小文字か
      `$' が `$' か `.' にマッチします。
      (通常の)特別文字は、文字集合の中では特別なものとして扱われない点に注意
      して下さい。 (そのかわり)文字集合の中では別の特別文字(`]', `-', `^')
      を用います。
       `]' を文字集合の中に含むには、それを最初の文字としなくてはいけませ
      ん。例えば、`[]a]' は `]' か `a' にマッチします。`-' を含むには `---'
      と書きます(これは `-' のみを含むレンジです)。`^' を含むためには、それ
      を文字集合の最初の文字にならないようにします。
[^ ... ]
       `[^' は、(指定された文字以外の文字にマッチする) 文字補集合(訳注:
      complement character set) を始めます。このため `[^a-z0-9A-Z]' は英文字
      や数字(訳注:digit) 以外のどの文字にもマッチします。`^' は、最初の文字
      として使われない限り特別な文字として扱われません。`^' に続く文字は、あ
      たかもそれが (`-' や `]' がそこでは特別なものとしては扱われない) 最初
      のものであるかのように扱われます。
      ニューラインがマッチしない文字の 1つとして記述されてない限り、文字補集
      合はニューラインにマッチします。

^

      は、empty ストリングにマッチする(特別な)文字ですが、これは(マッチング
      が行なわれるテキスト中の)行の先頭でのみマッチします。このため、`^foo'
      は行の先頭にある `foo' にマッチします。

$

       `^' に似ていますが、行の終りでのみマッチします。このため、`xx*$' は行
      の終りにある 1 つ以上の `x' のストリングにマッチします。

\

      は、2 つの働きをします。それは(`\' を含む)特別な文字をクォートするの
      と、 (追加された)特別な構成を導入することです。
       `\' は特別な文字をクォートするため、`\$' は `$' にのみマッチする正規
      表現で、`\[' は ^[' にのみマッチする正規表現であることになります。

注意: (歴史的な面からの)コンパティビリティーのため、特別な文字はその特別な意味 が意味を持たない(訳注:make no sense) コンテキストでは普通の文字として扱われま す。例えば、`*foo' は `*' が(それに対し)機能する(前に置かれた) expression を持 たないため、`*' を通常の文字として扱います。 (しかし)この動きに依存するのはよ いことではありません。 (それがどこに現われるにせよ) 特別な文字はクォートしてお いたほうがよいでしょう。

(ほとんどの場合)文字が後ろに続く `\' はその文字にのみマッチしますが、いくつか 例外(`\' が前に置かれると特別な構成になる文字)が存在します。このような文字はそ れだけが現われた場合(常に)通常のものとなります。以下に(この) `\' 構成のテーブ

ルを示します。

\|

      は、選択(訳注:alternative)を示します。`\|' を間に持つ 2 つの正規表現
      a と b は、a にマッチするか b にマッチするものにマッチする expression
      を構成します。
      このため、`foo\|bar' は `foo' か `bar' にマッチしますが、それ以外のス
      トリングにはマッチしません。
       `\|' は(可能な)最も大きく囲む expression にマッチします。それを囲む
      `\( ... \)' グルーピングのみが `\|' のグルーピングの力を限ることができ
      ます。
       `\|' を複数用いたものを扱う (完全な)バックトラックの機能が存在しま
      す。
\( ... \)
      は 3 つの目的を持つグルーピングの構成要素です。
      1. 他の操作に対し、`\|' 選択要素の集合を囲みます。このため、
      `\(foo\|bar\)x' は `foox' か `barx' にマッチします。
      2. プレフィックス `*' がそれに対し操作を行なう(複雑な) expression を囲
      みます。このため `ba\(ba\)*' は、ストリング `na' の 0 回以上の繰返しを
      持つ `bananana' 等にマッチします。
      3. (将来参照するため)マッチしたサブストリングをマークします。
      この最後のものは括弧によるグルーピングという考えから来たものではありま
      せん。 (この 2つの意味は実際には競合しないため)これは、たまたま同じ
      `\( ... \)' 構成にアサインされた第 2 の意味になっています。次にこの機
      能を説明します。

\数字(訳注:digit)

       `\( ... \)' 構成の後、マッチを行なうもの(訳注:matcher) はこの構成に
      マッチしたテキストの始めと終りを覚えます。`\' の後に数字(訳注:digit)
      を続けたものを (この後の)正規表現に用い、"数字番目に `\( ... \)' 構成
      にマッチしたテキストにマッチするもの" を意味させることができます。
      最初の 9 つの (正規表現中に現われる `\( ... \)' 構成にマッチした)スト
      リングには、その開き括弧が(正規表現中に)現われた順に数字の 1 から 9 が
      アサインされます。`\1' から `\9' はそれに対応する `\( ... \)' 構成に
      マッチするテキストを参照します。
      例えば、`\(.*\)\1' は 2 つの同じものからなるニューラインを含まない (全
      ての)ストリングにマッチします。`\(.*\)' は頭の半分の部分にマッチし、そ
      れは何であってもかまいませんが、それに続く `\1' はそれと(全く)同じテキ
      ストにマッチしなくてはいけません。

\`

      は、それがバッファの先頭にある場合、empty ストリングにマッチします。

\'

      は、それがバッファの終りにある場合、empty ストリングにマッチします。

\b

      は、それが word の先頭か終りにある場合、empty ストリングにマッチしま
      す。このため `\bfoo\b' は 1つの word として現われた `foo' にマッチしま
      す。`\bballs?\b' は 1つの word としての `ball' か `balls' にマッチしま
      す。

\B

      は、それが word の先頭か終りにない場合、empty ストリングにマッチしま
      す。

\<

      は、それが word の先頭にある場合、empty ストリングにマッチします。

\>

      は、それが word の終りにある場合、empty ストリングにマッチします。

\w

      は、word を構成する(全ての)文字にマッチします。エディタのシンタックス
      テーブルは(word を構成する)文字を示します。

\W

      は、word を構成しない(全ての)文字にマッチします。

\sコード

      は、そのシンタックスがコードである(全ての)文字にマッチします。コードは
      シンタックスコードを示す文字です。`w' は word を構成するものに対するも
      ので、`-' は空白(訳注:whitespace)に対するもので、`(' は開き括弧(訳注:
      open-parenthesis)に対するものです。セクション 37.3 [シンタックステーブ
      ル]、ページ 354 参照。

\Sコード

      は、そのシンタックスがコードでない(全ての)文字にマッチします。

以下に (それに続く空白とともに)センテンスの終りを認識するのに Emacs が用いてい る(複雑な)正規表現を示します。これはスペースをタブ文字と区別できるようにする Lisp のシンタックで与えられています。Lisp シンタックスにおいて、ストリング(構 成)はダブルクォート(訳注:" のこと)で始めダブルクォートで終ります。`\"' は正規 表現の部分としてのダブルクォートを示し、^\\' は正規表現の部分としてのバックス ラッシュ(訳注:\ のこと)を示し、`\t' はタブ、`\n' はニューラインを示します。

      "[.?!][]\"')]*\\($\\|\t\\|  \\)[ \t\n]*"

これは、次の 4 つの部分から構成されています。ピリオド(訳注:. のこと) や `?' や `!' にマッチする文字集合。 (何回か繰り返される) 閉じのブランケットかクォー トか括弧にマッチする文字集合。 (行末かタブか 2つのスペースにマッチする) backslash-parentheses(訳注:\( ... \) のこと) 中の選択要素。 (何回か繰り返され る) 空白文字にマッチする文字集合。


Go to the first, previous, next, last section, table of contents.