Previous:[MySQLは知っておくべき(5)] [ワイルドカードを使用してフィルタリングする]
+++++++++++++ Start line ++++++++++++++++
記事ディレクトリ
1.正規表現の概要
あらゆる種類のプログラミング言語、テキストエディタ、およびオペレーティングシステムが正規表現をサポートしています。
次に、MySQL正規表現を使用します
MySQLは、WHERE句を使用した正規表現の予備サポートを提供します。これにより、正規表現を指定し、SELECTで取得したデータをフィルタリングできます。
正規表現言語の
サブセットのみMySQLは、ほとんどの正規表現実装の小さなサブセットのみをサポートします
2.1基本的な文字マッチング
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '1000'
-> ORDER BY prod_name;
分析
このステートメントは、LIKEを使用したステートメントと非常によく似ています。REGEXPに続くものは正規表現として扱われます
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '.000'
-> ORDER BY prod_name;
分析
。正規表現言語の特殊文字です。任意の文字に一致することを意味するため、1000と2000が一致して返されます
LIKEとREGEXP
LIKEは列全体と一致します。一致したテキストが列の値にある場合、LIKEは見つからず、対応する行は返されません。REGEXPは列値内で一致しますが、一致したテキストが列値にある場合、REGEXPはそれを見つけ、対応する行が返されます。
2.2 ORマッチングを実行する
2つの文字列のいずれかを検索するには、|を使用します。
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '1000|2000'
-> ORDER BY prod_name;
2.3複数の文字のいずれかに一致
[and]で囲まれた文字のセットを指定する
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '[123] Ton'
-> ORDER BY prod_name;
分析
[123] Tonは[1 | 2 | 3] Tonの略です
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '1|2|3 Ton'
-> ORDER BY prod_name;
分析
[^ 123]これらの文字以外のすべてに一致します
2.4マッチング範囲
セットを使用して、一致する1つ以上の文字を定義できます
範囲は完全なセットに限定されません。範囲は必ずしも数値ではありません。[az]は任意の文字に一致します
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '[1-5] Ton'
-> ORDER BY prod_name;
2.5特殊文字に一致
mysql> SELECT vend_name
-> FROM vendors
-> WHERE vend_name REGEXP '.'
-> ORDER BY vend_name;
分析
。任意の文字に一致するため、すべての行が取得されます
mysql> SELECT vend_name
-> FROM vendors
-> WHERE vend_name REGEXP '\\.'
-> ORDER BY vend_name;
一致\
バックスラッシュ文字自体に一致させるには、\\を使用する必要があります
2.6複数のインスタンスのマッチング
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '\\([0-9] sticks?\\)'
-> ORDER BY prod_name;
分析
[0-9]任意の数字の
棒と一致しますか?棒と棒を一致させます
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '[[:digit:]]{4}'
-> ORDER BY prod_name;
分析
[:digit:]は任意の数字に一致します
{4}は4回出現する前に文字が必要です
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '[0-9][0-9][0-9][0-9]'
-> ORDER BY prod_name;
2.8ロケーター
mysql> SELECT prod_name
-> FROM products
-> WHERE prod_name REGEXP '^[0-9\\.]'
-> ORDER BY prod_name;
分析
^一致文字列の始まり
REGXPをLIKEのように動作させる
LIKEとREGEXPの違いは、LIKEが文字列全体と一致し、REGEXPが文字列と一致することです。ロケーターを使用して、各式を^で開始し、各式を$で終了することにより、REGEXPをLIKEと同じにすることができます。
+++++++++++++ End line ++++++++++++++++