MySQL 中的 REGEXP_SUBSTR() 函數用於模式匹配。此函數返回輸入字符串中與給定正則表達式模式匹配的子字符串。如果沒有找到匹配項,它將返回 NULL。如果表達式或模式為 NULL,則函數將返回 NULL。
REGEXP_SUBSTR() 與 SUBSTRING 函數相同,但不是隻提取給定的子字符串,該函數還允許我們搜索字符串以查找正則表達式模式。
用法
以下是在 MySQL 中使用此函數的基本語法:
REGEXP_SUBSTR (expression, pattern [, position[, occurrence[, match_type]]])
參數說明
REGEXP_SUBSTR() 函數參數的解釋是:
expression:它是一個輸入字符串,我們將通過正則表達式對其進行搜索。
pattern:它表示子字符串的正則表達式模式。
REGEXP_SUBSTR() 函數也使用下麵給出的可選參數:
pos:它用於指定字符串中表達式中的位置以開始搜索。如果我們省略這個參數,它從位置 1 開始。
occurrence:它用於指定我們要搜索的匹配項。如果我們省略此參數,則使用第一次出現。
match_type:它是一個字符串,可以讓我們細化正則表達式。它使用以下可能的字符來執行匹配。
- c:它表示區分大小寫的匹配。
- i:它表示不區分大小寫的匹配。
- E:它用於使用子表達式提取子字符串。
- m:它表示識別字符串中的行終止符的 multiple-line 模式。默認情況下,此函數匹配字符串開頭和結尾的行終止符。
- n:它用於修改 . (點)字符來匹配行終止符。默認情況下,它會停在一行的末尾。
- u:它表示 Unix-only 行尾,僅通過 .、^ 和 $匹配運算符識別換行符。
讓我們通過各種例子來理解它。
示例
以下語句解釋了 MySQL 中 REGEXP_SUBSTR 函數的基本示例。
mysql> SELECT REGEXP_SUBSTR ('England or America', 'l.nd') AS substring;
此語句找到匹配項並返回以下輸出:
假設在輸入字符串中找到多個匹配項。在這種情況下,默認返回匹配子字符串的第一次出現。但是,如果需要,我們也可以指定另一個事件。請參閱以下聲明:
mysql> SELECT REGEXP_SUBSTR ('Lend for land', 'l.nd') AS substring;
此語句找到匹配項並返回匹配子字符串的第一次出現,因為我們沒有指定任何特定的出現。請參閱以下輸出:
如果輸入字符串和模式(子字符串)字符串不匹配,則此函數返回 NULL 值。請參閱以下示例:
mysql> SELECT REGEXP_SUBSTR ('England or America', '^C') AS substring;
這是輸出:
如果我們想通過指定起始位置返回子字符串,我們可以使用 REGEX_SUBSTR 函數,如下所示:
mysql> SELECT REGEXP_SUBSTR ('dig dog dug', 'd.g', 2) AS substring;
在此語句中,我們將起始位置指定為 2。執行此查詢,我們將獲得以下輸出,其中我們可以看到匹配子字符串的第一個位置未返回。
讓我們看另一個例子來更清楚地理解它:
mysql> SELECT
REGEXP_SUBSTR('dig dog dug', 'd.g', 1) AS 'Position 1',
REGEXP_SUBSTR('dig dog dug', 'd.g', 2) AS 'Position 2',
REGEXP_SUBSTR('dig dog dug', 'd.g', 6) AS 'Position 6';
這是輸出:
如果我們想指定返回匹配子字符串的具體出現,我們可以使用這個函數,如下所示:
mysql> SELECT REGEXP_SUBSTR ('dig dog dug', 'd.g', 1, 3) AS 'Occurrence 3';
在本例中,我們指定匹配子串的起始位置為 1,匹配子串的出現次數為 3。因此我們將得到以下輸出:
這是另一個示例,我們將起始位置指定為 2,出現次數為 1、2 和 3。
mysql> SELECT
REGEXP_SUBSTR ('dig dog dug', 'd.g', 2, 1) AS 'Occurrence 1',
REGEXP_SUBSTR ('dig dog dug', 'd.g', 2, 2) AS 'Occurrence 2',
REGEXP_SUBSTR ('dig dog dug', 'd.g', 2, 3) AS 'Occurrence 3';
此函數將給出以下輸出,因為起始位置是在第一次出現之後出現的。因此,此函數假定事件 2 為事件 1,事件 3 為事件 2。然後沒有找到更多的事件,因此事件 3 的結果變為 NULL。
我們可以提供一個額外的參數來使用匹配類型參數來細化正則表達式。例如,我們可以使用它來驗證匹配是否區分大小寫或包含行終止符。請參閱以下示例,其中我們指定了區分大小寫和不區分大小寫的匹配:
mysql> SELECT
REGEXP_SUBSTR ('Dig Dog Dug', 'd.g', 1, 1, 'i') AS ' Case-Insensitive',
REGEXP_SUBSTR ('Dig Dog Dug', 'd.g', 1, 1, 'c') AS ' Case-Sensitive';
這是輸出:
相關用法
- MySQL REGEXP_INSTR()用法及代碼示例
- MySQL REGEXP_REPLACE()用法及代碼示例
- MySQL REPEAT()用法及代碼示例
- MySQL REPLACE()用法及代碼示例
- MySQL REVERSE()用法及代碼示例
- MySQL ROUND()用法及代碼示例
- MySQL RPAD()用法及代碼示例
- MySQL ROW_NUMBER()用法及代碼示例
- MySQL RIGHT()用法及代碼示例
- MySQL RADIANS()用法及代碼示例
- MySQL RAND()用法及代碼示例
- MySQL RTRIM()用法及代碼示例
- MySQL POWER()用法及代碼示例
- MySQL LEAD() and LAG()用法及代碼示例
- MySQL IS_IPV4()用法及代碼示例
- MySQL WEEK()用法及代碼示例
- MySQL CHARACTER_LENGTH()用法及代碼示例
- MySQL CURTIME()用法及代碼示例
- MySQL weekofyear()用法及代碼示例
注:本文由純淨天空篩選整理自 MySQL REGEXP_SUBSTR() Function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。