MySQL - REGEXP 運算子



MySQL 的REGEXP運算子用於使用正則表示式進行模式匹配。如果匹配則返回1,否則返回0。此運算子類似於REGEXP_LIKE()函式,但提供了其他選項,例如不區分大小寫和 Unicode 字元範圍。

正則表示式(也稱為 regex 或 regexp)是一系列構成搜尋模式的字元。它們可用於執行所有型別的文字搜尋和文字替換操作。

MySQL 提供了各種用於處理正則表示式的函式和運算子,包括 REGEXP、REGEXP_REPLACE、REGEXP_INSTR、REGEXP_SUBSTR 和 REGEXP_LIKE。這些函式允許您在字串中搜索模式,替換或修改字串中的文字,提取與指定正則表示式模式匹配的子字串,以及確定字串是否與給定的正則表示式模式匹配。

語法

以下是 MySQL REGEXP 運算子的語法:

expr REGEXP pat

它有兩個運算元:

  • expr - 您想要在其上進行搜尋的字串值(左側)。

  • pat - 您要搜尋的正則表示式(右側)。

示例

讓我們從一個簡單的示例開始,我們檢查字串“Welcome to Tutorialspoint”是否包含模式“to”:

SELECT 'Welcome to Tutorialspoint' REGEXP 'to';

以上程式碼的輸出如下:

'Welcome to Tutorialspoint' REGEXP 'to'
1

示例

在本例中,我們正在字串“This is a sample string.”中搜索模式“is”。

SELECT 'This is a sample string' REGEXP 'is';

以上程式碼的輸出如下所示:

'This is a sample string' REGEXP 'is'
1

示例

您還可以使用RLIKE運算子作為 REGEXP 的替代方案。它提供與 REGEXP 相同的結果。在這裡,我們檢查字串“Welcome to Tutorialspoint.”中是否存在模式“unknown”。

如果在字串中找不到給定的模式,則此運算子返回 0:

SELECT 'Welcome to Tutorialspoint' REGEXP 'unknown';

獲得的輸出如下:

'Welcome to Tutorialspoint' REGEXP 'unknown';
0

這是另一個例子:

SELECT 'This is a sample string' RLIKE 'value';

產生的結果如下所示:

'This is a sample string' RLIKE 'value';
0

示例

如果前兩個運算元中的任何一個為 NULL,則此運算子返回 NULL。在這裡,我們檢查 NULL 是否與模式“value”匹配:

SELECT NULL REGEXP 'value';

我們得到如下輸出:

NULL REGEXP 'value'
NULL

以下是另一個示例:

SELECT 'Tutorialspoint' REGEXP NULL;

以上程式碼的輸出如下:

'Tutorialspoint' REGEXP NULL
NULL

示例

您可以使用NOT子句反轉結果。如果匹配則返回 0,如果沒有匹配則返回 1。

在此示例中,我們檢查模式“is”是否不存在於字串“This is a sample string”中:

SELECT NOT 'This is a sample string' REGEXP 'is';

以上程式碼的輸出如下所示:

NOT 'This is a sample string' REGEXP 'is'
0

以下是另一個示例:

SELECT NOT 'Welcome to Tutorialspoint' REGEXP 'unknown';

獲得的結果如下:

NOT 'Welcome to Tutorialspoint' REGEXP 'unknown'
1

示例

假設我們在資料庫中使用 CREATE 語句建立了一個名為“EMP_TABLE”的表,並在其中插入了三條記錄,如下所示:

CREATE TABLE EMP_TABLE(
   ID VARCHAR(5), 
   Name VARCHAR(255), 
   DOB DATE, 
   Location VARCHAR(255)
);

現在,讓我們使用 INSERT 語句向其中插入記錄:

INSERT INTO EMP_TABLE VALUES 
('101', 'Amit', DATE('1970-01-08'), 'Hyderabad'),
('102','Sumith', DATE('1990-11-02'), 'Vizag'),
('105','Sudha', DATE('1980-11-06'), 'Delhi'),
('MyID2','Raja', DATE('1980-11-06'), 'Goa'),
('109','Javed', DATE('1980-11-06'), 'Pune'),
('AA', 'Suma', DATE('1980-11-06'), 'Chennai'),
('120','Vani', DATE('1980-11-06'), 'Delhi'),
('oo1','Devi', DATE('1980-11-06'), 'Goa');

以下查詢顯示 ID 值僅包含數字的記錄:

SELECT * FROM EMP_TABLE where ID REGEXP '^[0-9]{3}$';

執行以上程式碼後,我們得到以下輸出:

ID NAME DOB Location
101 Amit 1970-01-08 Hyderabad
102 Sumith 1990-11-02 Vizag
105 Sudha 1980-11-06 Delhi
109 Javed 1980-11-06 Pune
120 Vani 1980-11-06 Delhi

以下查詢顯示 EMP_TABLE 中名稱以字母“s”開頭的記錄:

SELECT * FROM EMP_TABLE where Name REGEXP '^[s]';

產生的結果如下所示:

ID NAME DOB Location
102 Sumith 1990-11-02 Vizag
105 Sudha 1980-11-06 Delhi
AA Suma 1980-11-06 Chennai

以下查詢顯示名稱包含“Raja”或“Roja”的所有記錄:

SELECT * FROM EMP_TABLE where Name REGEXP 'Raja|Roja';

產生的輸出如下所示:

ID NAME DOB Location
MyID2 Raja 1980-11-06 Goa
mysql-regexp-operator.htm
廣告