mysql正規表現マニュアル


付録G:MySQL正規表現
正規表現は、複雑な検索のためのモードを指定する強力な方法です.
MySQLは、POSIX 1003.2に適合することを目標とするHenry Spencerの正規表現で実施される.付録C:ありがとうございます.MySQLは拡張バージョンを採用しており、SQL文でREGEXPオペレータとともに使用されるモードマッチング操作をサポートしています.3.3.4.7節、モードマッチングを参照してください.
この付録では、MySQLでREGEXP操作に使用できる特殊な文字と構造をまとめ、いくつかの例を示しています.この付録には、Henry Spencerのregex(7)マニュアルページで確認できるすべての詳細は含まれていません.このマニュアルページは、regexディレクトリの下にあるMySQLソース配布版のregexに含まれています.7ファイルにあります.
正規表現は文字列のセットを記述します.最も簡単な正規表現は、特殊な文字を含まない正規表現です.たとえば、正規表現helloはhelloに一致します.
非平凡な正規表現は、特殊な特定の構造を採用し、1つ以上の文字列と一致させることができる.たとえば、正規表現hello|wordは文字列helloまたは文字列wordに一致します.
より複雑な例として、正規表現B[an]*sは、Bananas、Baaaas、Bs、およびBで開始し、sで終了し、任意の数のaまたはn文字を含む任意の他の文字列に一致する.
REGEXPオペレータの場合、正規表現には次のような特殊文字と構造を使用できます.
·         ^
文字列の先頭に一致します.
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/r/nfo' REGEXP '^f.*$';                -> 1
 SELECT 'f' REGEXP '^f.';                                               ->0
SELECT 'f1' 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
SELECT 'f' REGEXP '^f*';                                                ->1

·         a+
1つ以上のa文字のシーケンスを一致させます.
mysql> SELECT 'Ban' REGEXP '^Ba+n';                     -> 1
mysql> SELECT 'Bn' REGEXP '^Ba+n';                      -> 0
SELECT 'faaCC' REGEXP '^fA+';                                   ->1

·         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}
{n}または{m,n}記号は、モードの多くの前述の原子(または「部分」)を一致させることができる正規表現を記述するより一般的な方法を提供する.mとnはいずれも整数である.
o        a*
a{0,}として書き込むことができます.
o        a+
a{1,}として書き込むことができます.
o        a?
a{0,1}として書き込むことができます.
より正確には、a{n}はaのn個のインスタンスと正確に一致する.a{n,}は、aのn個以上のインスタンスに一致する.a{m,n}は、aのm〜n個のインスタンスに一致し、mおよびnを含む.
mとnは0~RE_にある必要がありますDUP_MAX(既定255)の範囲内で、0とRE_を含むDUP_MAX.mとnが同時に与えられた場合、mはn以下でなければならない.
mysql> SELECT 'abcde' REGEXP 'a[bcd]{2}e';              -> 0
mysql> SELECT 'abcde' REGEXP 'a[bcd]{3}e';              -> 1
mysql> SELECT 'abcde' REGEXP 'a[bcd]{1,10}e';           -> 1

·         [a-dX],[^a-dX]
A、b、c、d、またはXのいずれかの文字に一致します.2つの他の文字間の「-」文字は、1文字目から2文字目までのすべての文字と一致する範囲を構成します.たとえば、[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.]
カッコ式([和])では、要素を照合する文字列に一致します.文字は、単一の文字または新しい行などの文字名です.ファイルregexp/cname.hでは、文字名の完全なリストが見つかります.
mysql> SELECT '~' REGEXP '[[.~.]]';                     -> 1
mysql> SELECT '~' REGEXP '[[.tilde.]]';                 -> 1

·         [=character_class=]
かっこ式([和])で、[=character_class=]で同類を表す.これは、同じ照合値を持つすべての文字と一致し、それ自体を含む.例えば、oと(+)が同じクラスのメンバーである場合、[[=o=]]]、[=(+)=]]と[o(+)]は同義語である.等同類は範囲の端点として使用してはならない.
·         [:character_class:]
カッコ式([および])、[:character_class:]は、用語クラスのすべての文字に一致する文字クラスを表します.標準クラス名は次のとおりです.
alnum
文字数文字
alpha
テキスト文字
blank
空白文字
cntrl
コントロールキャラクタ
digit
数値文字
graph
グラフィック文字
lower
小文字文字
print
図またはスペース文字
punct
句読点文字
space
スペース、タブ、新しい行、およびリターン
upper
大文字文字
xdigit
16進数文字
これらはctype(3)マニュアルページで定義された文字クラスを表します.特定の地域では、他のクラス名が指定される場合があります.文字クラスは範囲の端点として使用できません.
mysql> SELECT 'justalnums' REGEXP '[[:alnum:]]+';       -> 1
mysql> SELECT '!!' REGEXP '[[:alnum:]]+';               -> 0

·         [[:<:]], [[:>:]]
これらのタグはword境界を表します.wordの開始と終了にそれぞれ一致します.wordは一連の文字で、その前と後ろには文字がありません.ワード文字はalnumクラスのアルファベット数字または下線()です.
mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]';   -> 1
mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]';  -> 0

正規表現で特殊文字の文字インスタンスを使用するには、その前に2つの反スラッシュ"/"文字を付けます.MySQL解析プログラムはいずれかを解釈し、正規表現ライブラリは別の解釈を担当します.たとえば、特殊文字「+」を含む文字列「1+2」と一致するには、次の正規表現で最後の文字だけが正しいです.
mysql> SELECT '1+2' REGEXP '1+2';                       -> 0
mysql> SELECT '1+2' REGEXP '1/+2';                      -> 0
mysql> SELECT '1+2' REGEXP '1//+2';                     -> 1
 
 
    regexp ‘    ’
               ;                  。
^:           
$:           
.:              ,       
[    ]:   “    ”        
[^    ]:     “    ”         
S1|S2|S3:   S1、S2 S3         
*:             ,  0 1 
+:             ,  1 
   {N}:      N 
   {M,N}:        M ,  N 
 
 
            :
 
^([2-9]{7,8})$
 
^01[3458]([0-9]{9})$
 
^1[3458]([0-9]{9})$
 
^0[1-9]([0-9]{11,12})$
 
^[1-9]{4,5}$
 
  400,800  :
^[48]00([0-9]{7})$