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


MySQL 正規表現構文の解説

正規表現は、複雑な検索を記述する強力な方法です。

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

さらに正確な情報は Henry Spencers regex.7 マニュアルを見てください。これ はソース配布に含まれています。 「Who has helped to make MySQL.」節参照 。

これは詳細を省いた簡単なリファレンスです。これ以降正規表現は regexp と呼 びます。

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

簡単でない正規表現は、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+
1個以上の a の並び。
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 の記述する一般的な方法。
a*
Can be written as a{0,}.
+
Can be written as a{1,}.
?
Can be written as a{0,1}.
さらに正確には、1つの整数 i とコンマ無しを含む修飾が続くアトムは、 厳密にアトムに適合する i 回の並びに適合します。整数 i とコ ンマを含む修飾が続くアトムは、アトムに適合する i 回以上の並びに適 合します。整数 ij を含む装飾が続くアトムは、アトムに適 合する i 回から j 回までの並びに適合します。 両方の引数は 0 >= value <= RE_DUP_MAX (デフォルト 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 照合要素を含む場合、RE [[.ch.]]*cchchcc の最初の5文字に適合します。
[=character-class=]
同等のクラス。その一つと等しい全ての照合要素の文字の並びを表します。それ 自身も含みます。 例えば、o(+) が同等クラスのメンバである場合、 [[=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.