MySQLには、正規表現(regex)を使用して操作を実行できるようにする関数と演算子がいくつかあります。この記事では、文字列が特定のパターンで指定された正規表現と一致するかどうかを確認できる2つの演算子と1つの関数について説明します。
これらの正規表現関数と演算子は次のとおりです。
-
REGEXP_LIKE()
-
REGEXP
-
RLIKE
演算子(次の2つ)は両方とも関数(最初の1つ)の同義語であるため、これらはすべて基本的に同等です。いずれにせよ、以下で3つすべての動作の例を見ることができます。
REGEXP_LIKE()
機能
まず、関数を見てみましょう。 REGEXP_LIKE()
を使用して正規表現検索を実行する例を次に示します。 機能:
SELECT REGEXP_LIKE('Car', '^C') AS 'Match', REGEXP_LIKE('Bar', '^C') AS 'No Match';
結果:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
最初の文字列は一致します( C で始まるため) )したがって、結果は1
になります。 。 2番目の文字列が一致しないため、結果は0
になります。 。
ただし、この関数は、単に1
を返すよりもはるかに便利です。 または0
。たとえば、WHERE
に追加できます データベースを照会するときの句。この場合、パターンに一致する行のリストを取得できます。
次に例を示します:
SELECT AlbumId, AlbumName FROM Albums WHERE REGEXP_LIKE(AlbumName, '^Power');
結果:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
完全な表は次のとおりです:
SELECT AlbumId, AlbumName FROM Albums;
結果:
+---------+--------------------------+ | AlbumId | AlbumName | +---------+--------------------------+ | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | | 4 | Ziltoid the Omniscient | | 5 | Casualties of Cool | | 6 | Epicloud | | 7 | Somewhere in Time | | 8 | Piece of Mind | | 9 | Killers | | 10 | No Prayer for the Dying | | 11 | No Sound Without Silence | | 12 | Big Swing Face | | 13 | Blue Night | | 14 | Eternity | | 15 | Scandinavia | | 16 | Long Lost Suitcase | | 17 | Praise and Blame | | 18 | Along Came Jones | | 19 | All Night Wrong | | 20 | The Sixteen Men of Tain | +---------+--------------------------+
REGEXP
オペレーター
REGEXP
を使用して同じことを行う方法は次のとおりです。 演算子:
SELECT 'Car' REGEXP '^C' AS 'Match', 'Bar' REGEXP '^C' AS 'No Match';
結果:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
そしてデータベースの例:
SELECT AlbumId, AlbumName FROM Albums WHERE AlbumName REGEXP '^Power';
結果:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
NOT REGEXP
を使用することもできます 反対の結果を返します。
RLIKE
オペレーター
そしてここではRLIKE
を使用しています :
SELECT 'Car' RLIKE '^C' AS 'Match', 'Bar' RLIKE '^C' AS 'No Match';
結果:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
そしてデータベースの例:
SELECT AlbumId, AlbumName FROM Albums WHERE AlbumName RLIKE '^Power';
結果:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
この場合、私は単にREGEXP
を交換しました RLIKE
の場合 残りのコードはそのままにしておきました。
NOT RLIKE
を使用することもできます 反対の結果を返します。
その他の正規表現機能
MySQLには、他のいくつかの正規表現関数と演算子も含まれています。これらのうちの3つを以下に示します。技術的には、最初の2つを使用して、文字列が正規表現パターンに一致するかどうかを「検出」することもできます(この場合、この記事のタイトルは、「文字列がMySQLの正規表現に一致するかどうかを検出する5つの方法」ではなく「 3つの方法…」)。
とにかく、ここにさらに3つの正規表現関数があります:
-
REGEXP_INSTR()
を使用できます 正規表現パターンに一致する部分文字列の開始インデックスを返す関数。 -
REGEXP_SUBSTR()
関数は、指定された正規表現パターンに一致する部分文字列を返します。 - そして
REGEXP_REPLACE()
関数は、指定された正規表現パターンに一致する文字列内の部分文字列の出現を置き換えます。