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) マニュアルを見てください。
これはソース配布に含まれています。 「C 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*
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?
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+
a{1,}.
a?
a{0,1}.
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.]]
ch 照合要素を含む場合、
正規表現 [[.ch.]]*c は chchcc の最初の5文字に適合します。
[=character_class=]
o と (+) が同等クラスのメンバである場合、
[[=o=]], [[=(+)=]], [[=(+)=]] は全て同義語です。
同等クラスは範囲の終了位置にはなりません。
[:character_class:]
[: と :] で括られた文字クラスの名前は、
そのクラスに属する全ての文字のリストを表します。標準文字クラス名は:
| Name | Name | Name |
| alnum | digit | punct |
| alpha | graph | space |
| blank | lower | upper |
| cntrl | xdigit |
ctype(3) マニュアルページに記載されている文字クラスを表します。
ロケールが他のを提供することもあります。文字クラスは範囲の終了位置としては使えません。
mysql> SELECT "justalnums" REGEXP "[[:alnum:]]+"; -> 1 mysql> SELECT "!!" REGEXP "[[:alnum:]]+"; -> 0
[[:<:]]
[[:>:]]
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.