MySQL8.0正则表达式:正则查找、中文匹配、正则替换、提取字符串

在MySQL中,使用REGEXPRLIKE操作符进行正则表达式匹配,而使用NOT REGEXPNOT RLIKE操作符进行不匹配。
一些常用的MySQL正则表达式语法:

匹配字符:

.:匹配任意字符(除了换行符)。
[]:匹配方括号中的任意字符。
[^]:匹配不在方括号中的任意字符。

匹配重复:
*:匹配零个或多个前面的字符。
+:匹配一个或多个前面的字符。
?:匹配零个或一个前面的字符。
{n}:匹配恰好n个前面的字符。
{n,}:匹配至少n个前面的字符。
{n,m}:匹配至少n个,但不超过m个前面的字符。

匹配位置:
^:匹配字符串的开头。
$:匹配字符串的结尾。
[]:匹配方括号中的任意字符。

其他:
\d:匹配任意数字。
\D:匹配任意非数字字符。
\s:匹配任意空白字符(包括空格、制表符、换行符等)。
\S:匹配任意非空白字符。
\w:匹配任意字母、数字或下划线。
\W:匹配任意非字母、数字或下划线字符。

REGEXP

SELECT * FROM `student` WHERE name REGEXP "^张";
SELECT * FROM `student` WHERE name REGEXP "三$";
SELECT * FROM `student` WHERE name REGEXP "[张李王][三四五]"

MySQL中的REGEXP操作符支持使用正则表达式进行模式匹配。然而,MySQL的REGEXP操作符在处理中文字符时可能会遇到一些问题,因为它的实现是基于字节的,而不是基于字符的。

在MySQL中,一个中文字符通常被存储为三个字节,而REGEXP操作符在处理时,可能会将一个多字节字符视为多个字节进行处理,从而导致匹配不正确。

RLIKE

RLIKE使用的是MySQL的正则表达式语法,而REGEXP使用的是POSIX风格的正则表达式语法。在RLIKE中,正则表达式需要被包含在RLIKE操作符中,而在REGEXP中,正则表达式需要被包含在REGEXP或REGEXP_LIKE函数中。

SELECT * FROM `article` WHERE content RLIKE "兔子王"

REGEXP_LIKE

SELECT * FROM `article` WHERE REGEXP_LIKE(content, "兔子王")

如果你需要在MySQL中使用正则表达式过滤中文字符,可以考虑使用MySQL的REGEXP_LIKE函数,它支持基于字符的正则表达式匹配。
MySQL在版本5.7及更早的版本中没有原生支持REGEXP_LIKE函数。然而,从MySQL 8.0版本开始,引入了REGEXP_LIKE函数,你可以在查询中使用它进行正则表达式匹配。

以下是MySQL版本与REGEXP_LIKE支持的对应关系:

MySQL 8.0及以上版本:支持REGEXP_LIKE函数。
MySQL 5.7及更早版本:不支持REGEXP_LIKE函数。
如果你使用的是MySQL 5.7及更早版本,并且需要使用正则表达式匹配功能,你可以考虑升级到MySQL 8.0版本或更高版本,或者使用其他方式实现正则表达式匹配,例如使用编程语言中的正则表达式库进行预处理或后处理。

替换字符串:REGEXP_REPLACE

使用REGEXP_REPLACE函数来替换字符串中匹配正则表达式的部分。

SELECT REGEXP_REPLACE(content, "兔子王", "小白兔") FROM `article`

分离提取字符串:REGEXP_SUBSTR

使用REGEXP_SUBSTR函数来分离提取字符串中匹配正则表达式的部分。

SELECT REGEXP_SUBSTR(content, "兔子王") FROM `article`

猜你喜欢

转载自blog.csdn.net/lilongsy/article/details/133038407