MySQL正規表現の使用MySQLは必ず
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に数字がないため).