运维实践|MySQL查询时如何正确使用正则表达式

在这里插入图片描述

📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师
🏆 近期荣誉:华为云云享专家、阿里云专家博主、 🔥
三连支持:欢迎 ❤️关注、👍点赞、👉收藏三连,支持一下博主~

文章目录

  • 引言
  • 理论实践操作
    • 1 在MySQL中的正则表达式
    • 2 正则表达式的类型
    • 3 REGEXP 使用规则
    • 4 测试数据准备
    • 5 REGEXP 实践
      • (1)MySQL中匹配枚举类
      • (2)MySQL中模糊匹配编号中有2数据
      • (3)MySQL中匹配汉字
    • 6 REGEXP_REPLACE实践
    • 7 正则表达式的性能
  • 结束语
  • 参考

引言

正则表达式(Regular Expression),又被称规则表达式,在代码中常简写为regex、regexp或RE,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。它对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合。
正则表达式的特点是:灵活性、逻辑性和功能性非常的强;可以迅速地用极简单的方式达到字符串的复杂控制;对于刚接触的人来说,比较晦涩难懂。所以正则表达式常被用在文本检索中。

理论实践操作

1 在MySQL中的正则表达式

REGEXP 是 MySQL 中的一个功能强大的正则表达式操作符,用于在字符串中执行模式匹配。它允许您使用正则表达式来搜索、替换或检查字符串。在MySQL中,正则表达式是一种为复杂搜索指定模式的强大方法。

2 正则表达式的类型

在MySQL中,有很多函数,我们常用的也就是 REGEXP,其他类型的很少使用。
在这里插入图片描述

3 REGEXP 使用规则

● 格式
SELECT [字符串str] REGEXP [模式str];

● 规则描述
(1)如果字符串 [字符串str] 与 [模式str] 指定的正则表达式匹配,则返回1,否则返回0。
(2)如果 [字符串str] 或 [模式str] 为NULL,则返回值为NULL。

4 测试数据准备

● 创建表

CREATE TABLE `it_student` (`s_id` varchar(20) NOT NULL COMMENT 'ID',`s_name` varchar(20) NOT NULL DEFAULT '' COMMENT '姓名',`s_birth` varchar(20) NOT NULL DEFAULT '' COMMENT '生日',`s_sex` varchar(10) NOT NULL DEFAULT '' COMMENT '性别',PRIMARY KEY (`s_id`) COMMENT '主键'
) 
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 
COMMENT '学生表';

● 测试数据

INSERT INTO `db_learn`.`it_student`(`s_id`, `s_name`, `s_birth`, `s_sex`) VALUES ('01', '赵雷', '1996-01-01', '男');
INSERT INTO `db_learn`.`it_student`(`s_id`, `s_name`, `s_birth`, `s_sex`) VALUES ('02', '钱电', '1996-12-21', '男');
INSERT INTO `db_learn`.`it_student`(`s_id`, `s_name`, `s_birth`, `s_sex`) VALUES ('03', '孙风', '1997-05-20', '男');
INSERT INTO `db_learn`.`it_student`(`s_id`, `s_name`, `s_birth`, `s_sex`) VALUES ('04', '李云', '1997-08-06', '男');
INSERT INTO `db_learn`.`it_student`(`s_id`, `s_name`, `s_birth`, `s_sex`) VALUES ('05', '周梅', '1996-12-01', '女');
INSERT INTO `db_learn`.`it_student`(`s_id`, `s_name`, `s_birth`, `s_sex`) VALUES ('06', '吴兰', '1997-03-01', '女');
INSERT INTO `db_learn`.`it_student`(`s_id`, `s_name`, `s_birth`, `s_sex`) VALUES ('07', '郑竹', '1996-07-01', '其他');
INSERT INTO `db_learn`.`it_student`(`s_id`, `s_name`, `s_birth`, `s_sex`) VALUES ('08', '王菊', '1996-01-20', '女');
INSERT INTO `db_learn`.`it_student`(`s_id`, `s_name`, `s_birth`, `s_sex`) VALUES ('22', 'Aion', '1999-01-20', '女');

5 REGEXP 实践

(1)MySQL中匹配枚举类

此类匹配很常见,例如是否,01,FM,男女等。下面就是我们常用的一些匹配规则:

SELECT * FROM it_student WHERE s_sex REGEXP '^[男]$';

执行结果如下:
在这里插入图片描述

(2)MySQL中模糊匹配编号中有2数据

这个也很常见,比较类似我们的like。他的用途是匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?。

SELECT * FROM it_student WHERE s_id REGEXP '^?2$';

执行结果如下:
在这里插入图片描述

到了这里,其实大家也都发现了端倪,按照固定格式只是变换掉了模式字符串就可以了。没错,这个是比较简单,后续就罗列一些常见的规则表达式。

(3)MySQL中匹配汉字

在有外国人的名字的时候,这个匹配很实用。我们可以将 Aion 这个用户过滤掉。

SELECT * FROM it_student WHERE s_name REGEXP '^[^ -~]';

执行结果如下:
在这里插入图片描述

有人可能有疑问,为什么不使用国籍来查询呢?这个主要取决于我们使用场景,如果你的数据库或应用程序需要处理中文字符,那么确保能够正确地匹配这些字符是很重要的。如果你的应用程序或网站面向全球用户,支持中文字符是重要的,以确保来自不同语言的用户能够顺利使用你的服务。还有就是目前大家都有可能上云,做数据迁移,你从一个支持中文字符的系统迁移到 MySQL,确保能够正确地处理这些字符是很重要的,就像我们上面的案例中所列举的。

6 REGEXP_REPLACE实践

如果你使用过replace,那么这个就很好理解了。我个人感觉这个就是一个加强版的replace。

SELECT REPLACE(s_name, 'Aion' , '替换Aion为六月暴雪') AS s_name FROM it_student WHERE s_name = 'Aion';
SELECT * FROM it_student; SELECT REGEXP_REPLACE(s_name, 'Aion' , '替换Aion为六月暴雪') AS s_name FROM it_student WHERE s_name = 'Aion';
SELECT * FROM it_student;

在这里插入图片描述
在这里插入图片描述

我使用 SELECT * FROM it_student; 这里加上这句是为了演示数据没有被替换,而是展示的结果数据被替换了。

7 正则表达式的性能

虽然现代的数据库系统(包括 MySQL)在处理正则表达式时已经相当高效,但在大规模数据集上执行复杂的正则表达式操作可能会对性能产生影响。确保你的查询是优化过的,以减少不必要的计算和I/O操作。是否需要使用 REGEXP 来匹配汉字取决于你的具体需求和场景。如果你需要处理中文字符,确保你的数据库、应用程序和查询都配置得当,以支持这些字符。

结束语

对于同一工作,采取不同的思维来处理,展示的结果也就不相同。凡是就怕认真二字,真的肯花心思,很难有什么事情做不好。怕就怕,资质平平,却又不肯花心思。那就不得怨天尤人了。我是「Aion」,一个爱钻研的开发者,希望同大家一起分享知识。

参考

[1]. MySQL REGEXP源码:https://dev.mysql.com/doc/dev/mysql-server/8.0.35/namespaceregexp.html
[2]. MySQL REGEXP使用:https://dev.mysql.com/doc/refman/8.0/en/regexp.html
[3]. 正则表达式:https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/226751.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Google Play上架:2023年度总结报告

今天是2023年的最后一个工作日,今天用来总结一下2023年关于谷歌商店上架的相关政策改动和对应的拒审解决方法。 目录 政策更新与改动2023 年 2 月 22 日2023 年 4 月5 日2023 年 7 月 12 日2023 年 10 月 25 日 开发者计划政策拒审邮件内容和解决办法 政策更新与改…

vue项目hdr格式文件放在assets下rgbeloader.load获取不到问题解决

如下图 我再App.vue组件中这样写 艾特符号定位 告诉系统 要src下的assets下的xhdr下的xidis.hdr 但是运行项目 他会告诉你找不到这个资源 我们改一下 我们组件时 App.vue 与assets同在 src目录下 用 ./去找 这样也是找不到的 我们需要将它放在静态资源包public下 public路…

【C++干货铺】STL中set和map的介绍和使用

个人主页点击直达:小白不是程序媛 C系列专栏:C干货铺 代码仓库:Gitee 目录 序列式容器 关联式容器 键值对 树形结构的关联式容器 set set的介绍 set的使用 set的模板参数列表 set的构造 ​编辑 set的容量 set的删除和查找 mult…

HPM6750开发笔记《开发环境的搭建》

目录 一,下载完整的HPM—SDK 二,安装硬件驱动 二,软件激活 三,创建工程 1.用文档中给的方法创建工程: 2.用sdk_env_v1.3.0中提供的工具创建工程: 一,下载完整的HPM—SDK 下载网址&#x…

Jmeter 分布式压测

‍你可以使用 JMeter 来模拟高并发秒杀场景下的压力测试。这里有一个例子,它模拟了同时有 5000 个用户,循环 10 次的情况‍。 请求默认配置 token 配置 秒杀接口 结果分析 但是,实际企业中,这种压测方式根本不满足实际需求。下面介…

XPM_CDC_SINGLE(UG974)

Parameterized Macro: Single-bit Synchronizer(参数化宏:单比特同步器) MACRO_GROUP: XPMMACRO_SUBGROUP: XPM_CDCFamilies: UltraScale, UltraScale 1、 Introduction(介绍) 此宏将一个一位信号从源时钟域同步到目…

医院绩效考核系统源码,java源码,商业级医院绩效核算系统源码

医院绩效定义: “医院工作量绩效方案”是一套以工作量(RBRVS,相对价值比率)为核算基础,以工作岗位、技术含量、风险程度、服务数量等业绩为主要依据,以工作效率和效益、工作质量、患者满意度等指标为综合考…

Python 操作 MySQL:使用 mysql-connector-python 操作 MySQL 数据库

大家好,我是水滴~~ 当涉及到使用 Python 操作 MySQL 数据库时,mysql-connector-python 库是一个强大而常用的选择。该库提供了与 MySQL 数据库的交互功能,使您能够执行各种数据库操作,如连接数据库、执行查询和插入数据等。在本文…

Shell三剑客:awk(awk编辑编程)五

一、前言 AWK 可以使用关联数组这种数据结构,索引可以是数字或字符串。AWK关联数 组也不需要提前声明其大小,因为它在运行时可以自动的增大或减小。 二、数组语法格式 array_name[index]valuearray_name:数组的名称index:数组索…

【数据结构】C语言实现双链表的基本操作

双链表及其基本操作的实现 导言一、单链表与双链表二、双链表类型的创建三、双链表的初始化四、双链表的创建五、双链表的遍历六、双链表的查找七、双链表的插入八、双链表的删除结语 导言 大家好,很高兴又和大家见面啦!!! 经过…

【adb】--- win10 配置 adb环境 超详细 (持续更新中)

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。 【adb】--- win10 配置 adb环境 超详细 &…

解决Qt“报无法定位程序输入点xxx于动态连接库“问题

今天,在使用QtVS2019编译工程时,弹出"无法定位程序输入点xxx于动态链接库"问题,如图(1)所示: 图(1) 报"无法定位程序输入点xxx于动态链接库"问题 出现这种问题的原因有很多: (1) 工程Release/Deb…

低代码选型注意事项

凭借着革命性的生产力优势,低代码技术火爆了整个IT圈。面对纷繁复杂的低代码和无代码产品,开发者该如何选择? 在研究低代码平台的年数上,本人已有3年,也算是个低代码资深用户了,很多企业面临低代码选型上的…

iOS 开发设计 App 上架符合要求的截图

1. 真机运行截屏 2. 可以在 Apple developer 官网 Design 下找到 iPhone 边框 https://developer.apple.com/design/resources/ 不用这个边框也行,可以参考已上架 App 的图片框 3. 使用 Procreate(PhotoShop)创建符合要求的画布大小 4. 导入…

听GPT 讲Rust源代码--src/tools(27)

File: rust/src/tools/clippy/clippy_lints/src/methods/suspicious_to_owned.rs 文件rust/src/tools/clippy/clippy_lints/src/methods/suspicious_to_owned.rs的作用是实施Clippy lint规则,检测产生潜在性能问题的字符转换代码,并给出相关建议。 在Rus…

智能优化算法应用:基于袋獾算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于袋獾算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于袋獾算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.袋獾算法4.实验参数设定5.算法结果6.参考文献7.MA…

【UE5.1】程序化生成Nanite植被

目录 效果 步骤 一、下载Gaea软件和树林资产 二、使用Gaea生成贴图 三、 生成地形 四、生成草地 五、生成树林 六、生成湖泊 七、其它功能介绍 7.1 调整树林生成的面积 7.2 让植物随风飘动 7.3 玩家和植物互动 7.4 雪中树林 7.5 环境音效 效果 步骤 一、下载Ga…

HBase 集群搭建

文章目录 安装前准备兼容性官方网址 集群搭建搭建 Hadoop 集群搭建 Zookeeper 集群解压缩安装配置文件高可用配置分发 HBase 文件 服务的启停启动顺序停止顺序 验证进程查看 Web 端页面 安装前准备 兼容性 1)与 Zookeeper 的兼容性问题,越新越好&#…

信息泄露总结

文章目录 一、备份文件下载1.1 网站源码1.2 bak文件泄露1.3 vim缓存1.4 .DS_Store 二、Git泄露2.1 git知识点2.1 log2.2 stash 三、SVN泄露3.1 SVN简介3.2 SVN的文件3.3 SVN利用 四、Hg泄露 一、备份文件下载 1.1 网站源码 常见的网站源码备份文件后缀: tartar.gz…

非阻塞 IO(NIO)

文章目录 非阻塞 IO(NIO)模型驱动程序应用程序模块使用 非阻塞 IO(NIO) 上一节中 https://blog.csdn.net/tyustli/article/details/135140523,使用等待队列头实现了阻塞 IO 程序使用时,阻塞 IO 和非阻塞 IO 的区别在于文件打开的时候是否使用了 O_NONB…