MySQL REGEXP_REPLACE 函数
MySQL REGEXP_REPLACE 函数用于模式匹配。这个函数 搜索字符串中的正则表达式模式并替换每个出现的模式 ,用符合给定的正则表达式模式的指定字符串替换。如果找到匹配,它将返回整个字符串和替换。如果没有找到匹配,返回的字符串保持不变。如果表达式、模式和替换字符串为空,该函数将返回NULL。
REGEXP_REPLACE(), REPLACE(), 和 TRANSLATE() 函数在 MySQL 中的作用相同,唯一的区别在于TRANSLATE允许进行多个单字符替换,而REPLACE函数用一个字符串替换另一个字符串,REGEXP_REPLACE函数则是搜索字符串中的正则表达式模式。
语法
在MySQL中使用该函数的基本语法如下:
REGEXP_REPLACE (expression, pattern, replace_string[, pos[, occurrence[, match_type]]])
参数解释
REGEXP_REPLACE()函数的参数解释如下:
expression: 它是一个输入字符串,我们将通过正则表达式参数和函数来进行搜索。
patterns: 它代表一个子字符串的正则表达式模式。
replace_string: 如果找到匹配,将用于替换的子字符串。
REGEXP_INSTR()函数使用以下各种可选参数:
pos: 用来指定在字符串中从哪个位置开始搜索。如果不指定此参数,则从位置1开始搜索。
occurrence: 用来指定需要搜索的匹配项的出现次数。如果不指定此参数,则替换所有匹配项。
match_type: 一个字符串,允许我们改进正则表达式。它使用以下可能的字符来进行匹配。
- c: 表示区分大小写的匹配。
- i: 表示不区分大小写的匹配。
- m: 表示多行模式,允许字符串内包含行终止符。默认情况下,此函数匹配字符串的开头和结尾处的行终止符。
- n: 用于修改 .(点)字符以匹配行终止符。
- u: 表示仅适用于Unix的行结尾。
让我们通过各种示例来理解它。
例子
以下语句解释了MySQL中REGEXP_REPLACE函数的基本示例。
mysql> SET @str = 'Javatpoint is a great websites';
mysql> SELECT @str AS 'Original String',
REGEXP_REPLACE(@str, 'great', 'an educational') AS 'Replaceable String';
这是输出结果:
假设我们的输入字符串中包含 字符串中的多个匹配项 ,那么这个函数将替换所有匹配项。请参阅下面的陈述:
mysql> SET @str = 'BCA MCA BBA BCA BBA';
mysql> SELECT @str AS 'Original String',
REGEXP_REPLACE(@str, 'BBA', 'PGDCA') AS 'Replaceable String';
这是输出结果:
如果输入字符串和可替换的字符串没有匹配项,则语句将返回原始字符串。请参阅下面的示例:
mysql> SET @str = 'BCA MCA BBA BCA BBA';
mysql> SELECT @str AS 'Original String',
REGEXP_REPLACE(@str, 'MBA', 'PGDCA') AS 'Resultant String';
这里是输出内容:
如果我们想要通过 指定替换的位置 来替换字符串,我们可以使用REGEX_REPLACE函数如下:
mysql> SET @str = 'BBA BCA BBA BCA BBA';
mysql> SELECT @str AS 'Original String',
REGEXP_REPLACE(@str, 'BBA', 'MCA', 2) AS 'Replaceable String';
在这个语句中,我们已经指定了位置2作为替换的起点。执行这个查询,我们将得到如下的输出,在这里我们可以看到可替换字符串的第一个位置没有被替换。
我们知道,默认情况下,所有匹配字符串的出现都会被替换。但是,我们还可以通过使用 occurrence 参数来指定要替换的特定出现。请参考下面的示例:
mysql> SET @str = 'BBA BCA BBA BCA BBA';
mysql> SELECT @str AS 'Original String',
REGEXP_REPLACE(@str, 'BBA', 'MCA', 2, 2) AS 'Replaceable String';
在这个例子中,可替换字符串的起始位置是在第一次出现开始后的第2个。因此,出现次数2变成了出现次数1,出现次数3变成了出现次数2。请参见下面的输出:
我们可以通过使用匹配类型参数来提供一个额外的参数来细化正则表达式。 例如, 我们可以使用它来验证匹配是否区分大小写或包括行终止符。请参考下面的示例,其中我们正在指定一个 区分大小写的 和 不区分大小写的匹配:
mysql> SET @str = 'BBA BCA BBA BCA BBA';
mysql> SELECT @str AS 'Original String',
REGEXP_REPLACE(@str, 'bba', 'MCA', 1, 0, 'c') AS ' Case-Sensitive',
REGEXP_REPLACE(@str, 'bba', 'MCA', 1, 0, 'i') AS ' Case-Insensitive';
这是输出结果: