正規表現は、複雑な検索を記述する強力な方法です。
MySQL は正規表現の regular Henry Spencers 実装を使用します。そ してこれは POSIX 1003.2 に一致することが目的です。MySQL は拡張 バージョンを使用します。
さらに正確な情報は Henry Spencers regex.7 マニュアルを見てください。これ はソース配布に含まれています。 「Who has helped to make MySQL.」節参照 。
これは詳細を省いた簡単なリファレンスです。これ以降正規表現は regexp と呼 びます。
正規表現は文字列の組み合わせて記述されます。もっとも簡単な場合は、非特殊
文字の一文字です。例えば、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*
mysql> select "Ban" regexp "^Ba*n"; -> 1 mysql> select "Baaan" regexp "^Ba*n"; -> 1 mysql> select "Bn" regexp "^Ba*n"; -> 1
a+
mysql> select "Ban" regexp "^Ba+n"; -> 1 mysql> select "Bn" regexp "^Ba+n"; -> 0
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}
a*
a{0,}.
+
a{1,}.
?
a{0,1}.
i とコンマ無しを含む修飾が続くアトムは、
厳密にアトムに適合する i 回の並びに適合します。整数 i とコ
ンマを含む修飾が続くアトムは、アトムに適合する i 回以上の並びに適
合します。整数 i と j を含む装飾が続くアトムは、アトムに適
合する 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.]]
ch 照合要素を含む場合、RE [[.ch.]]*c は
chchcc の最初の5文字に適合します。
[=character-class=]
o と (+) が同等クラスのメンバである場合、
[[=o=]], [[=(+)=]], [o(+)] は全て同義語です。同等ク
ラスは範囲の終了位置にはなりません。
[:character_class:]
[: と :] で括られた文字クラスの名前は、
そのクラスに属する全ての文字のリストを表します。標準文字クラス名は:
| alnum | digit | punct |
| alpha | graph | space |
| blank | lower | upper |
| cntrl | xdigit |
mysql> select "justalnums" regexp "[[:alnum:]]+"; -> 1 mysql> select "!!" regexp "[[:alnum:]]+"; -> 0
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.