首页 > 数据库 >MySQL正则表达式:模式匹配、中文匹配、替换、提取字符串

MySQL正则表达式:模式匹配、中文匹配、替换、提取字符串

时间:2023-09-26 14:03:11浏览次数:33  
标签:字符 匹配 LIKE 正则表达式 MySQL REGEXP 模式匹配


在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`


标签:字符,匹配,LIKE,正则表达式,MySQL,REGEXP,模式匹配
From: https://blog.51cto.com/lilongsy/7608018

相关文章

  • MySQL主从复制实践
    MySQL主从复制实践多个数据库间主从复制与读写分离的模型​ 在一主多从的数据库体系中,多个从服务器采用异步的方式更新主数据库的变化;业务服务器在执行写或者相关修改数据库的操作是在主服务器上进行的,读操作则是在各从服务器上进行​ Mysql主从复制的实现原理图大致如下​......
  • MySQL配置文件
    /etc/my.cnf默认配置#Foradviceonhowtochangesettingspleasesee#http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html[mysqld]##Removeleading#andsettotheamountofRAMforthemostimportantdata#cacheinMySQL.Start......
  • Mysql使用 jemalloc 内存分配器
    /usr/lib64/libjemalloc.so是一个动态链接库文件,它包含了jemalloc内存分配器的实现。jemalloc是一个通用的内存分配器,旨在为多线程应用程序提供优秀的性能。它通常被用在需要高效内存管理的应用程序中,如数据库服务器、Web服务器等。安装库文件这个库文件一般是通过系统的包......
  • jmeter正则表达式提取
    参考:https://www.cnblogs.com/uncleyong/p/10779268.html正则表达式提取器:后置处理器-正则表达式提取器Applyto:一般保持默认选择Mainsampleonly,这个用得最多,如果有sub-samples,可以选择第一个选项要检查的响应字段:用得最多的是主体,即header+body,可以从响应头,也可以从响应体......
  • Linux系统之安装MySQL8.0版本
    一、MySQL介绍1.1MySQL简介MySQL8.0是最新版本的MySQL数据库管理系统,是一种关系型数据库管理系统,由Oracle公司开发和维护。MySQL8.0带来了一系列新特性,包括多个性能提升,更好的安全性和扩展性,以及新的管理功能。1.2MySQL特点更好的性能:MySQL8.0提供了对于大型查......
  • Windows 安装并配置 MySQL 5.7
    Windows安装并配置MySQL5.7 Windows下安装MySQL有两种方式:下载安装包,根据向导提示一步步安装,不需要什么配置,比较简单下载压缩包,通过命令来安装和配置本文介绍第二种安装方法,使用的MySQL版本为5.7.38假设你已经下载了MySQL压缩文件安装包(官网下载地址:https://www.mysql.......
  • mysql 获取最近6个月的年月
      @s< 5 控制多少个月  SELECT DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL@s:=@s+1MONTH),'%Y-%m')AS`mon` FROM mysql.help_topic, (SELECT@s:=-1)temp WHERE @s<5 ORDERBYmon......
  • 正则表达式输入中文英文名
    请输入正确的姓名,支持中文或者英文(20位字符内),例如:杨颖/^([\u4e00-\u9fa5]{1,20}|[a-zA-Z\.\s]{1,20})$/如果想要支持名字中间输入·和.这样写,例如:迪丽热巴·迪力木拉提/^[\u4e00-\u9fa5a-zA-Z·.]+$/......
  • MySQL索引原理
    入驻博客园的第一篇博客,希望能够将知识点解释清楚,有些地方可能有一些啰嗦,望见谅。(本文为转载,转载地址文末,自己加了一些结构上的调整) 一、几种树的介绍首先介绍几种树的数据结构:二叉搜索树(BST)、平衡二叉树、B树、B+树1.1二叉搜索树二叉搜索树具有以下性质:(1)......
  • 正则表达式
    #按照邮件地址的格式(用户名@域名.后缀)来编写正则表达式#该正则表达式中包含了四个部分:#1.用户名:由一个或多个字母、数字、下划线、点、减号组成,且必须以字母或数字开头(用于描述用户名的部分用小括号括起来)#2.@符号:该部分只包含一个@符号#3.域名:由一个或多个字母、数字......