MySQL REGEXP_REPLACE()函数

MySQL REGEXP_REPLACE() 函数用于模式匹配。此函数在字符串中搜索正则表达式模式,并用与给定正则表达式模式匹配的指定字符串替换每次出现的模式。如果找到匹配项,它将返回整个字符串以及替换项。如果没有找到匹配项,则返回的字符串不变。如果表达式、模式和替换字符串为 NULL,则函数将返回 NULL。

MySQL中的REGEXP_REPLACE()、REPLACE()和TRANSLATE()函数的工作方式相同,只是 TRANSLATE 允许我们进行多个单字符替换,并且 REPLACE 函数将一个完整的字符串替换为另一个字符串,而 REGEXP_REPLACE 搜索一个正则表达式模式的字符串。

一、MySQL REGEXP_REPLACE()函数 语法

以下是在 MySQL 中使用此函数的基本语法:

REGEXP_REPLACE (expression, pattern, replace_string[, pos[, occurrence[, match_type]]])  

参数说明

expression:它是一个输入字符串,我们将在其上执行正则表达式参数和函数的搜索。

patterns:它表示子字符串的正则表达式模式。

replace_string:如果找到匹配项,它将被替换的子字符串。

REGEXP_INSTR() 函数使用下面给出的各种可选参数:

pos:用于指定表达式在字符串中的位置开始搜索。如果我们不指定此参数,它将从位置 1 开始。

occurrence:它用于指定我们要搜索的匹配项。如果我们不指定此参数,则替换所有匹配项。

match_type:它是一个字符串,可以让我们细化正则表达式。它使用以下可能的字符来执行匹配。

  • c:表示区分大小写的匹配。
  • i:表示不区分大小写的匹配。
  • m:它表示一种多行模式,允许在字符串中使用行终止符。默认情况下,此函数匹配字符串开头和结尾的行终止符。
  • n:用于修改 . (点)字符以匹配行终止符。
  • u:它表示仅 Unix 的行尾。

二、MySQL REGEXP_REPLACE()函数 示例

以下语句解释了 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';  

输出结果:

假设我们的输入字符串在 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';  

输出结果:

热门文章

优秀文章