MySQL正規表現の使用MySQLは必ず

8869 ワード

正規表現の役割は、1つのモード(正規表現)をテキスト列と比較する一致方本です.
MySQLはWHERE句を用いて正規表現に初歩的なサポートを提供し、正規表現でSELECTで取得したデータをフィルタリングすることを指定できます.
MySQLは、多くの正規表現で実装されている小さなサブセットのみをサポートします.
----------------------
9.2.1基本文字の一致
REGEXP後に続くものを正規表現として扱う.

SELECT prod_name
FROM products
WHERE prod_name REGEXP
'1000'
ORDER BY prod_name;

------ ------
+------------------------+
|    prod_name    |
+------------------------+
|  JetPack 1000  |
+------------------------+


 
 
.は、いずれかの文字に一致することを示します.

SELECT prod_name
FROM products
WHERE prod_name REGEXP
'.000'
ORDER BY prod_name;

------------ -----------

+-------------------------+
|     prod_name    |
+-------------------------+
|   JetPack 1000  |
|   JetPack 2000  |
+-------------------------+


 
MySQLの正規表現の一致は大文字と小文字を区別しません.
大文字と小文字を区別するには、BINARYキーを使用します.
例えば:WHERE prod_name REGEXP BINARY 'JetPack .000'
 
9.2.2 OR照合を行う
2つの列の1つ(またはこの列、または別の列)を検索するには、|を使用します.
|ORオペレータとして、いずれかに一致することを示します.OR条件は2つ以上与えられます.

SELECT prod_name
FROM products
WHERE prod_name REGEXP
'1000 | 2000'
ORDER BY prod_name;

------------ ------------

+----------------------+
|  prod_name   |
+----------------------+
| JetPack 1000 |
| JetPack 2000 |
+----------------------+


 
[]任意の文字を一致させます.
1または2または3に一致する文字のセットを定義する.
[]は別の形式のOR文であり、[123]Tonは[1|2|3]Tonの略である.
^文字セットを否定し、指定した文字以外のものに一致します.[^123]は、これらの文字以外のものと一致します.

SELECT prod_name
FROM products
WHERE prod_name REGEXP
'[123] Ton'
ORDER BY prod_name;

------------- ------------

+--------------------+
| prod_name   |
+--------------------+
| 1 ton anvil    |
| 2 ton anvil    |
+--------------------+


 
一致範囲
[0123456789]または[0-9]は、0から9の数字に一致します.
[a-z]任意のアルファベット記号を一致させる

SELECT prod_name
FROM products
WHERE prod_name REGEXP
'[1-5] Ton'
ORDER BY prod_name;

---------- -----------

+-------------------+
|  prod_name |
+-------------------+
|  .5 ton anvil  |
|  1 ton anvil   |
|  2 ton anvil   |
+-------------------+


 
特殊文字の一致
\が先頭です.すなわち転義する正規表現内の特殊な意味を持つすべての文字は、このように変換する必要があります.
\-は検索を表します-
\\. 検索を表す

SELECT prod_name
FROM vendors
WHERE vend_name REGEXP
'\\.'
ORDER BY vend_name;

------------- -------------

+----------------------+
|  vend_name   |
+----------------------+
|  Furball Inc.    |
+----------------------+


 
\は、メタ文字(特殊な意味を持つ文字)を参照するためにも使用されます.

\\f    
\
   
\\r    
\\t    
\\v    


 
一致文字クラス

[:a;num:]     ( [a-zA-Z0-9])
[:alpha:]     ( [a
-zA-Z])
[:blank:]     ( [\\t])
[:cntrl:]        ASCII (ASCII 0 31 127)
[:digit:]       ( [0
-9])
[:graph:]     [
"print:] ,
[:lower:]       ( [a-z])
[:
print:]        
[:punct:]       [:alnum:] [:cntrl:]
[space:]       ( [\\f\
\\t\\r\\v])
[:upper:]     ( [A
-Z])
[:xdigit:]       ( [a
-fA-F0-9])


 
複数のインスタンスを一致させる

             
*                       0
+                      1 ( {1, })
?                      0 1 ( {0,
1})
{n}                    
{n, }                  
{n ,m}                 (m 255)


 
以下の例:s後の?sをオプションにします.なぜなら?前の任意の文字に一致する0回または1回が表示されます.

SELECT prod_name
FROM products
WHERE prod_name REGEXP
'\\([0-9] sticks?\\)'
ORDER BY prod_name;

------------ ------------

+-----------------------+
|  prod_name    |
+-----------------------+
|  TNT (1 stick)   |
|  TNT (5 sticks) |
+-----------------------+


 
常に4桁の数字にマッチ:WHERE prod_name REGEXP '[[:digit:]]{4}'
 
ロケータ

^        
$        
[[:
<:]]  
[[:
>:]]  


 

SELECT prod_name
FROM products
WHERE prod_name REGEXP
'^[0-9\\.]'
ORDER BY prod_name;

----------- ----------

+---------------------+
|   prod_name  |
+---------------------+
|  .5 ton anvil   |
|  1 ton anvil    |
|  2 ton anvil    |
+---------------------+


 
^の二重用途:集合において([]で定義)、その集合を否定する.そうでなければ、列の開始とを指します.
LIKEは列全体にマッチし、REGEXPはサブ列にマッチする.
単純な正規表現テストでは、データベースを使用せずにSELECTを使用して正規表現をテストできます.
REGEXPチェックは常に0(一致なし)または1(一致)を返し、文字列付きREGEXPで測定できます.
式を試し、それらを試します.対応する構文は次のとおりです.
        SELECT 'hello' REGEXP '[0-9]'
この例は0を返します(テキストhelloに数字がないため).