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

# I MySQL の正規表現の文法について

A regular expression (regex) is a powerful way of specifying a complex search.

MySQL は正規表現の regular Henry Spencers 実装を使用します。 そしてこれは POSIX 1003.2 に一致することが 目的です。MySQL は拡張 バージョンを使用します。

これは詳細を省いた簡単なリファレンスです。 さらに正確な情報は Henry Spencers `regex(7)` マニュアルを見てください。 これはソース配布に含まれています。 「E Credits」節参照.

正規表現は文字列の組み合わせて記述されます。 もっとも簡単な場合は、非特殊文字の一文字です。例えば、 regexp `hello` は `hello` と適合し、 他には適合しません。

簡単でない正規表現は、1つの文字列以上に適合できるような、いくつかの 特殊な構成を使用します。例えば、regexp `hello|word` は 文字列 `hello` と文字列 `word` に適合します。

そしてさらに複雑な例 regexp `B[an]*s` は、 文字列 `Bananas`, `Baaaaas`, `Bs` のどれか、 そして `B` で始まり `a` や `n` が 任意の数続き、`s` で終わるような他の文字列に適合します。

正規表現では、次の特殊文字/構成が使用できます：

`^`
  文字列全体の始まり。

      mysql> select "fo\nfo" REGEXP "^fo$";           -> 0
      mysql> select "fofo" REGEXP "^fo";              -> 1

`$`
  文字列全体の終り。

      mysql> select "fo\no" REGEXP "^fo\no$";         -> 1
      mysql> select "fo\no" REGEXP "^fo$";            -> 0

`.`
  任意の文字 (改行含む)。

      mysql> select "fofo" REGEXP "^f.*";             -> 1
      mysql> select "fo\nfo" REGEXP "^f.*";           -> 1

`a*`
  0個以上の文字 `a` の並び。

      mysql> select "Ban" REGEXP "^Ba*n";             -> 1
      mysql> select "Baaan" REGEXP "^Ba*n";           -> 1
      mysql> select "Bn" REGEXP "^Ba*n";              -> 1

`a+`
  文字 `a` が 1個以上並ぶ。

      mysql> select "Ban" REGEXP "^Ba+n";             -> 1
      mysql> select "Bn" REGEXP "^Ba+n";              -> 0

`a?`
  0 または 1個の文字 `a`。

      mysql> select "Bn" REGEXP "^Ba?n";              -> 1
      mysql> select "Ban" REGEXP "^Ba?n";             -> 1
      mysql> select "Baan" REGEXP "^Ba?n";            -> 0

`de|abc`
  `de` か `abc` にマッチ。

      mysql> select "pi" REGEXP "pi|apa";             -> 1
      mysql> select "axe" REGEXP "pi|apa";            -> 0
      mysql> select "apa" REGEXP "pi|apa";            -> 1
      mysql> select "apa" REGEXP "^(pi|apa)$";        -> 1
      mysql> select "pi" REGEXP "^(pi|apa)$";         -> 1
      mysql> select "pix" REGEXP "^(pi|apa)$";        -> 0

`(abc)*`
  文字列 `abc` の 0 回以上の並びにマッチ。

      mysql> select "pi" REGEXP "^(pi)*$";            -> 1
      mysql> select "pip" REGEXP "^(pi)*$";           -> 0
      mysql> select "pipi" REGEXP "^(pi)*$";          -> 1

`{1}`
`{2,3}`
  多くの発生に適合する regexp の記述する一般的な方法。 The is a more general way of writing regexps that match many occurrences of the previous atom.
  `a*`
    Can be written as `a{0,}`.
  `a+`
    Can be written as `a{1,}`.
  `a?`
    Can be written as `a{0,1}`.
  さらに正確には、1つの整数 i とコンマ無しを含む修飾が続くアトムは、 厳密にアトムに適合する `i` 回の並びに適合します。 整数 `i` とコンマを含む修飾が続くアトムは、 アトムに適合する `i` 回以上の並びに適合します。 整数 `i` と `j` を含む装飾が続くアトムは、 アトムに適 合する `i` 回から `j` 回までの並びに適合します。 両方の引数は `0` から `RE_DUP_MAX` (default 255) の間でなければなりません。 そして引数が2つある場合、2番目は1番目よりも大きいか同じでなければなりません。
`[a-dX]`
`[^a-dX]`
  `a`, `b`, `c`, `d`, `X` のどれかの文字 (`^` を使用するとどれでもない文字) にマッチ。 `]` 文字を含めるには、 `[` のあとに続いてすぐに書く必要があります。 `-` 文字を含めるには最初か最後に書く必要があります。 `[0-9]` は任意 の10進数値に適合します。 `[]` ペア内部の定義された 意味を持たない全ての文字は、特殊な意味を持たず、それ自身にだけ適合します。

      mysql> select "aXbc" REGEXP "[a-dXYZ]";         -> 1
      mysql> select "aXbc" REGEXP "^[a-dXYZ]$";       -> 0
      mysql> select "aXbc" REGEXP "^[a-dXYZ]+$";      -> 1
      mysql> select "aXbc" REGEXP "^[^a-dXYZ]+$";     -> 0
      mysql> select "gheis" REGEXP "^[^a-dXYZ]+$";    -> 1
      mysql> select "gheisa" REGEXP "^[^a-dXYZ]+$";   -> 0

`[[.characters.]]`
  照合要素(collating element)の文字の並び。 並びは括弧表現リストの一つの要素です。 複数文字の照合要素を含む括弧表現は一つ以上の文字に適合します。 例えば、照合並びが `ch` 照合要素を含む場合、 正規表現 `[[.ch.]]*c` は `chchcc` の最初の5文字に適合します。
`[=character_class=]`
  同等のクラス。その一つと等しい全ての照合要素の文字の並びを表します。それ自身も含みます。 例えば、`o` と `(+)` が同等クラスのメンバである場合、 `[[=o=]]`, `[[=(+)=]]`, `[[=(+)=]]` は全て同義語です。 同等クラスは範囲の終了位置にはなりません。
`[:character_class:]`
  括弧表現の内部で、`[:` と `:]` で括られた文字クラスの名前は、 そのクラスに属する全ての文字のリストを表します。標準文字クラス名は:

  alnum | digit | punct
  alpha | graph | space
  blank | lower | upper
  cntrl | print | xdigit

  これらは `ctype(3)` マニュアルページに記載されている文字クラスを表します。 ロケールが他のを提供することもあります。文字クラスは範囲の終了位置としては使えません。

      mysql> select "justalnums" REGEXP "[[:alnum:]]+";       -> 1
      mysql> select "!!" REGEXP "[[:alnum:]]+";               -> 0

`[[:<:]]`
`[[:>:]]`
  それぞれ、単語の始めと終りの空文字列に適合します。単語は、単語文字が前後 にない単語文字の並びとして定義されます。単語文字は alnum 文字 (`ctype(3)` で定義されます) と下線(underscore ； `_`)です。

      mysql> select "a word a" REGEXP "[[:<:]]word[[:>:]]";      -> 1
      mysql> select "a xword a" REGEXP "[[:<:]]word[[:>:]]";     -> 0

    mysql> select "weeknights" REGEXP "^(wee|week)(knights|nights)$"; -> 1

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