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.