正規表現は、複雑な検索を記述する強力な方法です。
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.