MySQL零散拾遗(八)--- MySQL正则表达式

MySQL 支持使用正则表达式进行模式匹配,这对于复杂的字符串处理非常有用。MySQL 中的正则表达式可以通过 REGEXPRLIKE 运算符来实现。下面详细介绍 MySQL 中正则表达式的语法和一些常用的正则表达式模式。

正则表达式基础

  1. 锚点

    • ^: 匹配字符串开头
    • $: 匹配字符串结尾
  2. 量词:

    • .(点):匹配除换行符以外的任意单个字符。
    • *: 匹配前一个字符(前面的表达式)零次或多次。
    • +: 匹配前一个字符(前面的表达式)一次或多次。
    • ?: 匹配前一个字符(前面的表达式) 0 次或 1 次
    • {n}: 匹配前一个字符(前面的表达式)恰好 n 次。
    • {n,}: 匹配前一个字符(前面的表达式)至少 n 次。
    • {n,m}: 匹配前一个字符(前面的表达式)至少 n 次但不超过 m 次。
  3. 字符类:

    • [abc]: 匹配方括号内的任意一个字符
    • [^abc]: 匹配不在方括号内的任意字符
    • [a-z]: 匹配 a 到 z 之间的任何小写字母。
    • [A-Z]: 匹配 A 到 Z 之间的任何大写字母。
    • [0-9]: 匹配任何数字。
  4. 预定义类:

    • \d: 匹配任意数字字符,等价于 [0-9]
    • \D: 匹配任意非数字字符,等价于 [^0-9]
    • \w: 匹配任意字母数字字符(包括下划线),等价于 [a-zA-Z0-9_]
    • \W: 匹配任意非字母数字字符,等价于 [^a-zA-Z0-9_]
    • \s: 匹配任意空白字符,包括空格、制表符、换行符等,等价于 [ \t\n\r\f\v]
    • \S: 匹配任意非空白字符,等价于 [^ \t\n\r\f\v]
  5. 特殊字符:

    • |:匹配左右任意一个表达式。
    • ():用于分组。
    • []:用于字符类。
    • {}:用于量词。
    • \:转义字符。
  6. 分组和引用

    • (pattern): 创建一个分组
    • \n: 引用第 n 个分组

使用 REGEXPRLIKE

在 MySQL 中,你可以使用 REGEXPRLIKE 运算符来应用正则表达式。这两个关键字在功能上是相同的,但在某些情况下,RLIKE 可能会被优化器优化得更好。

示例
  • 匹配以 ‘John’ 开头的字符串
    SELECT * FROM users WHERE name REGEXP '^John';

  • 匹配包含 ‘smith’ 的字符串(不区分大小写)
    SELECT * FROM users WHERE name REGEXP 'smith';

  • 匹配只包含数字的字符串
    SELECT * FROM users WHERE phone REGEXP '^[0-9]+$';

  • 匹配包含 ‘www.’ 或 ‘https://’ 的 URL
    SELECT * FROM urls WHERE url REGEXP '^(www\.|https://)'

  • 替换包含 ‘foo’ 的字符串为 ‘bar’
    SELECT REPLACE(column, 'foo', 'bar') FROM table;

  • 匹配包含数字的字符串
    SELECT * FROM users WHERE phone REGEXP '\\d';

  • 匹配只包含字母的字符串
    SELECT * FROM products WHERE name REGEXP '^\\w+$';

  • 匹配包含空白字符的字符串
    SELECT * FROM comments WHERE content REGEXP '\\s';

  • 匹配不包含数字的字符串
    SELECT * FROM addresses WHERE city REGEXP '^\\D+$';

匹配电子邮箱

假设我们有一个表 emails,包含一个字段 email,现在我们要找出所有有效的电子邮件地址:

SELECT user_id, name, mail
FROM Users
-- 请注意,我们还转义了`@`字符,因为它在某些正则表达式中具有特殊意义
WHERE mail REGEXP '^[a-zA-Z][a-zA-Z0-9_.-]*\\@leetcode\\.com$';

上面提到了分组和引用,那就详细的介绍介绍

在 MySQL 的正则表达式中,分组和引用是非常有用的功能。它们可以帮助我们更灵活地匹配和处理字符串。

分组

在正则表达式中,使用圆括号 () 可以创建一个分组。分组可以用于以下目的:

  1. 将一部分正则表达式作为一个整体进行匹配。
  2. 对分组进行某些操作,如替换、捕获等。

示例:

-- 匹配以 "www." 开头,后跟 1 个或多个字母数字字符,然后是 ".com" 的字符串
SELECT * FROM websites WHERE url REGEXP '^www\\.(\\w+)\\.com$';

在上述例子中,(\\w+) 是一个分组,它匹配 1 个或多个字母数字字符。

引用

在正则表达式中,可以使用 \1\2 等来引用已经匹配的分组。这在进行字符串替换或重新排列时非常有用。

示例:

-- 提取 URL 中的域名部分
SELECT REGEXP_REPLACE(url, '^www\\.(\\w+)\\.com$', '\\1')
FROM websites;

在上述例子中,\\1 引用了第一个分组 (\\w+),即域名部分。REGEXP_REPLACE 函数使用这个引用进行字符串替换,提取出域名。

另一个示例:

-- 将邮件地址中的用户名和域名部分交换
SELECT CONCAT(REGEXP_SUBSTR(email, '\\@'), '.', REGEXP_SUBSTR(email, '^[^\\@]+'))
FROM users;

在这个例子中,我们使用 REGEXP_SUBSTR 函数提取邮件地址中的用户名和域名部分,然后使用 CONCAT 函数将它们交换位置。

分组和引用是正则表达式中非常强大的功能,可以帮助我们更灵活地处理字符串。在 MySQL 中使用这些特性可以大大提高我们处理数据的能力。

注意事项

  • MySQL 的正则表达式支持多种模式匹配,但并不是所有的正则表达式功能都可用,特别是在某些版本的 MySQL 中。
  • 在使用正则表达式时,确保对输入数据进行适当的测试和验证,以避免安全漏洞或性能问题。
  • 对于复杂或特定的正则表达式需求,你可能需要查阅 MySQL 的官方文档或使用在线资源来获得更详细的指导。

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

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

相关文章

STM32自己从零开始实操10:PCB全过程

一、PCB总体分布 分布主要参考有: 方便供电布线。方便布信号线。方便接口。人体工学。 以下只能让大家看到各个模块大致分布在板子的哪一块,只能说每个人画都有自己的理由,我的理由如下。 还有很多没有表达出来的东西,我也不知…

NXP i.MX 6系列处理器加入“产品长期供货计划”

近期,NXP(恩智浦半导体)的i.MX 6系列处理器已加入其“产品长期供货计划”,不同型号处理器的生命周期得到了10~15年的延长,确保了长期稳定的供货与维护。 (NXP产品长期供货计划的目的,是给客户的…

Elasticsearch:Java ECS 日志记录 - log4j2

ECS 记录器是你最喜欢的日志库的格式化程序/编码器插件。它们可让你轻松将日志格式化为与 ECS 兼容的 JSON。ECS 兼容的 JSON 日志记录可以帮我们简化很多分析,可视化及解析的工作。在今天的文章里,我来详述如何在 Java 应用里生成 ECS 相兼容的日志。 …

Prometheus各类监控及监控指标和告警规则

目录 linux docker监控 linux 系统进程监控 linux 系统os监控 windows 系统os监控 配置文件&告警规则 Prometheus配置文件 node_alert.rules docker_container.rules mysql_alert.rules vmware.rules Alertmanager告警规则 consoul注册服务 Dashboard JSON…

GD 32 流水灯

前言: 通过后面的学习掌握了一些逻辑架构的知识,通过复习的方式将学到的裸机任务架构的知识运用起来,同时巩固前面学到的知识,GPIO的配置等。 开发板上LED引脚使用示意图 注:此次LED灯的点亮凡是是高电平点亮&#xff…

如何解决ChromeDriver 126找不到chromedriver.exe问题

引言 在使用Selenium和ChromeDriver进行网页自动化时,ChromeDriver与Chrome浏览器版本不匹配的问题时有发生。最近,许多开发者在使用ChromeDriver 126时遇到了无法找到chromedriver.exe文件的错误。本文将介绍该问题的原因,并提供详细的解决…

【第一天】计算机网络 TCP/IP模型和OSI模型,从输入URL到页面显示发生了什么

TCP/IP模型和OSI模型 这两个模型属于计算机网络的体系结构。 OSI模型是七层模型,从上到下包括: 应用层,表示层,会话层,传输层,网络层,数据链路层,物理层 TCP/IP模型是四层模型&…

uniapp原生插件开发实战——iOS打开文件到自己的app

用原生开发获取文件的名称、路径等能力封装为一个插件包供前端使用 首先根据ios插件开发教程,创建一个插件工程,template 选framework 开始编写代码: iOS 9 及以下版本会调用以下方法: - (BOOL)application:(UIApplication *_N…

关键词查找【Boyer-Moore 算法】

1、【Boyer-Moore 算法】 【算法】哪种算法有分数复杂度?- BoyerMoore字符串匹配_哔哩哔哩_bilibili BM算法的精华就在于BM(text, pattern),也就是BM算法当不匹配的时候一次性可以跳过不止一个字符。即它不需要对被搜索的字符串中的字符进行逐一比较,而…

HTML前端面试题之<iframe>标签

面试题:iframe 标签的作用是什么?有哪些优缺点 ? 讲真,刷这道面试题之前我根本没有接触过iframe,网课没讲过,项目实战没用过,但却在面试题里出现了!好吧,我只能说:前端路漫漫&…

2024年软件系统与信息处理国际会议(ICSSIP 2024)即将召开!

2024年软件系统与信息处理国际会议(ICSSIP 2024)将于2024年10月25-27日在中国昆明举行。引领技术前沿,共谋创新未来。ICSSIP 2024将汇聚来自世界各地的专家学者,他们将在会上分享最新的研究成果、技术突破及实践经验。会议议题涵盖…

DataEase一键部署:轻松搭建数据可视化平台

DataEase是一个开源的数据可视化和分析工具,旨在帮助用户轻松创建和共享数据仪表盘。它支持多种数据源,包括关系型数据库,文件数据源,NoSQL数据库等,提供强大的数据查询、处理和可视化功能。DataEase 不仅是一款数据可…

通信原理-思科实验四:静态路由项配置实验

实验四 静态路由项配置实验 一:实验内容 二:实验目的 三、实验原理 四、实验步骤 选择三个2811型号的路由器 R1、R2、R3 路由器默认只有两个快速以太网接口,为路由器R1和R3增加快速以太网接口模块NM-1FE-TX,安装后检查路由器的接…

【电源专题】结合锂电池相关资料和华为手机聊聊锂离子电池使用条件限制

在文章:【电源专题】锂电池的特点和工作原理 中我们讲到了一些关于锂电池种类和特点、工作原理等。但是对于锂离子电池使用条件限制却没有介绍,本文基于手机产商 锂离子电池使用条件-电池性能和应用介绍 | 华为官网 (huawei.com)提供的介绍文档再次深入学习锂离子电池的一些特…

bug+测试用例

bug的概念: 1.当且仅当规格说明是存在的并且正确,程序与规格说明之间的不匹配才是错误。 2.当需求规格说明书没有提到的功能,判断标准以最终用户为准;当程序没有实现其最终用户合理预期的功能要求时,就是软件错误 bug…

区块链浏览器开发指南分享

01 概括 区块链浏览器是联盟链上的一种数据可视化工具,用户可以通过web页面,直接在浏览器上查看联盟链的节点、区块、交易信息和子链信息、标识使用信息等,用以验证交易等区块链常用操作。 02功能模块 区块链网络概览 区块链网络概览显示…

【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件

目录 ​编辑 前言 系统调用 open 参数flags 参数mode write 追加方式 read close 文件描述符 打开多个文件并观察其文件描述符 C语言文件操作 理解一切皆文件 理解open操作 前言 各类语言的文件操作其实是对系统调用的封装 我们经常说,创建一个文件&a…

【数据结构】顺序表(杨辉三角、简单的洗牌算法)

🎇🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔 💪💪💪 谢谢你这么帅…

MySQL可重复读的隔离机制下是否彻底解决了幻读?

答案:没有彻底解决。 一、什么是幻读? 当同一个查询在不同时间产生不同的结果集时,事务中就会出现幻读问题。 幻读关注的是记录数量的不同。 不可重复读关注的是记录内容的不同。 二、快照读和当前读 InnoDB引擎的默认隔离级别是可重复读&…

音视频入门基础:H.264专题(17)——FFmpeg源码获取H.264裸流文件信息(视频压缩编码格式、色彩格式、视频分辨率、帧率)的总流程

音视频入门基础:H.264专题系列文章: 音视频入门基础:H.264专题(1)——H.264官方文档下载 音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…