正则函数
本文介绍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 | +------+