本文介紹AnalyticDB MySQL版集群支持的正則函數。
前提條件
AnalyticDB MySQL版集群的內核版本需為3.1.5.10及以上版本。
如何查看集群的內核版本,請參見如何查看實例版本信息。
REGEXP_INSTR
regexp_instr(source, pattern[, position[, occurrence[, option]]] )
命令說明:字符串source中搜索匹配正則表達式的子字符串,并返回該子字符串在字符串source中的位置。如果指定position,則從第position個字符開始匹配,默認為1;如果指定occurrence,則返回第occurrence個匹配的位置,默認為1。option可以是0或1,默認為0,option為0時返回匹配子字符串的起始位置;option為1時返回匹配子字符串結束位置的下一個字符位置。
輸入值說明:
source
:待搜索的字符串,取值類型為VARCHAR。pattern
:正則表達式。position
:表示從source的第一個字符開始匹配,position默認為1。取值類型為BIGINT。occurrence
:表示返回第一次匹配的子字符串,occurrence默認為1。取值類型為BIGINT。option
:表示指定返回的位置,option可以是0或1,默認為0。取值類型為BIGINT。
返回值說明:返回BIGINT類型。沒有匹配到字符串時,返回0。
示例:
示例1
SELECT REGEXP_INSTR('dog cat dog', 'dog') as res;
返回結果如下。
+-----+ | res | +-----+ | 1 | +-----+
示例2
SELECT REGEXP_INSTR('dog cat dog', 'dog', 1, 2) as res;
返回結果如下。
+-----+ | res | +-----+ | 9 | +-----+
示例3
SELECT REGEXP_INSTR('dog cat dog', 'dog', 1, 1, 1) as res;
返回結果如下。
+-----+ | res | +-----+ | 4 | +-----+
REGEXP_MATCHES
regexp_matches(source, pattern[, flag])
命令說明:返回字符串source中匹配正則表達式的子字符串構成的數組。如果包含flag 'g',則返回所有匹配的子字符串結果,數組中可有多個元素;否則只返回匹配的第一個結果,數組中只有一個結果。如果pattern中包含帶括號的子正則表達式,那么結果數組中的元素為各個子正則表達式對應的子字符串,否則為單個匹配pattern的子字符串。
輸入值說明:
source
:待搜索的字符串,取值類型為VARCHAR。pattern
:正則表達式。flag
:標志一個或多個控制函數的字符,取值類型為VARCHAR。
返回值說明:返回array(array(VARCHAR))類型。沒有匹配到字符串時,返回空數組。
示例:
示例1
SELECT regexp_matches('foobarbequebaz', '(bar)(beque)');
返回結果如下。
+---------------------+ | regexp_matches | +---------------------+ | [["bar","beque"]] |
示例2
SELECT regexp_matches('foobarbequebaz', 'barbeque');
返回結果如下。
+---------------------+ | regexp_matches | +---------------------+ | [["barbeque"]] |
示例3
SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g');
返回結果如下。
+------------------------------------------+ | regexp_matches | +------------------------------------------+ | [["bar","beque"], ["bazil","barf"]] |
REGEXP_REPLACE
regexp_replace(source, pattern, replacement[, position[, occurrence]])
命令說明:將字符串source中匹配pattern的子字符串替換為replacement。如果指定position,則從第position個字符開始匹配和替換,默認為1;如果指定occurrence,則替換第occurrence個匹配的子字符串,默認為0,表示替換全部。
輸入值說明:
source
:待搜索的字符串,取值類型為VARCHAR。pattern
:正則表達式。replacement
:將匹配pattern的字符串替換后的字符串。取值類型為VARCHAR。position
:表示從source的第一個字符開始匹配和替換,position默認為1。取值類型為BIGINT。occurrence
:表示第occurrence次匹配的字符串替換為replacement,occurrence默認為0。取值類型為BIGINT。
返回值說明:返回VARCHAR類型。沒有匹配到字符串時,返回原字符串。
示例:
示例1
SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X') as res;
返回結果如下。
+-------+ | res | +-------+ | X X X | +-------+
示例2
SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X', 1, 3) as res;
返回結果如下。
+-----------+ | res | +-----------+ | abc def X | +-----------+
REGEXP_SUBSTR
regexp_substr(source, pattern[, position[, occurrence]])
命令說明:返回字符串source中匹配正則表達式的子字符串。如果指定position,則從第個字符開始匹配,position默認為1;如果指定occurrence,則返回第occurrence個匹配的子字符串,occurrence默認為1。
輸入值說明:
source
:待搜索的字符串,取值類型為VARCHAR。pattern
:正則表達式。position
:表示從source的第一個字符開始匹配,position默認為1。取值類型為BIGINT。occurrence
:表示返回第一次匹配的子字符串,occurrence默認為1。取值類型為BIGINT。
返回值說明:返回VARCHAR類型。沒有匹配到字符串時,返回NULL。
示例:
示例1
SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+', 1, 3) as res;
返回結果如下。
+------+ | res | +------+ | ghi | +------+
示例2
SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+') as res;
返回結果如下。
+------+ | res | +------+ | abc | +------+