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.mzph.cn/news/876036.shtml

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

相关文章

Python 高阶语法

前言: 我们通过上篇文章学习了Python的基础语法,接下来我们来学习Python的高阶语法 1.初识对象 在Python中我们可以做到和生活中那样,设计表格、生产表格、填写表格的组织形式的 面向对象包含 3 大主要特性:  封装  继承 …

Zilliz 推出 Spark Connector:简化非结构化数据处理流程

随着人工智能(AI)和深度学习(Deep Learning)技术的高速发展,使用神经网络模型将数据转化为 Embedding 向量 已成为处理非结构化数据并实现语义检索的首选方法,广泛应用于搜索、推荐系统等 AI 业务中。 以生…

架构建模-系统架构师(三十二)

1、DNS配置文件是(),它包含了主机的域名搜索顺序和DNS服务器地址。 A /etc/hostname B /dev/host.conf C /etc/resolv.conf D /dev/name.conf 解析: 保存在etc/reolv.conf 2、信息隐蔽式开发整体程序时使用的法则&#xff0c…

C语言 定义结构体变量并计算该日在本年中是第几天

定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题&#xff08;即将闰年情况包含在内&#xff09;。 #include <stdio.h>typedef struct {int year;int month;int day; } Date;int isLeapYear(int year) {if ((year % 4 0 && year %…

力扣202.快乐数

202. 快乐数 - 力扣&#xff08;LeetCode&#xff09; 主要是用到了鸽巢原理&#xff0c;最后他们一定会重合&#xff0c;我们只需要判断类似&#xff0c;链表的成环相遇的时候是不是1就行了 class Solution { public:int bitsum(int n){int sum 0;while (n){int a 0;a n …

用护眼灯还需要开灯吗?护眼灯行业三大套路迷局揭秘

用护眼灯还需要开灯吗&#xff1f;在使用护眼台灯时&#xff0c;同时开启室内的主照明十分必要。如果关闭其他灯具&#xff0c;仅保留护眼台灯&#xff0c;那么只有台灯周围的小片区域能够被照亮&#xff0c;而房间的其他部分则处于相对昏暗的状态。这种明显的光线差异会造成视…

freertos的学习cubemx版

HAL 库的freertos 1 实时 2 任务->线程 3 移植 CMSIS_V2 V1版本 NVIC配置全部是抢占优先级 第四组 抢占级别有 0-15 编码规则&#xff0c; 变量名 &#xff1a;类型前缀&#xff0c; c - char S - int16_t L - int32_t U - unsigned Uc - uint8_t Us - uint…

Java常见的面试二

1、普通类和抽象类有那些区别 普通类中不能有抽象方法&#xff0c;抽象类中可以有抽象方法普通类可以直接实例化&#xff0c;抽象类不能直接实例化 2、抽象类能够使用final修饰吗 不能&#xff0c;抽象类是由子类继承的&#xff0c;但是final修饰的类不能被继承。两者矛盾所以…

《书生大模型实战营第3期》入门岛 学习笔记与作业:Python 基础知识

文章大纲 Python 简介1 安装Python1.1 什么是conda&#xff1f;1.1.1 功能与作用&#xff1a;1.1.2 常用命令&#xff1a;1.1.3 适用性&#xff1a; 1.2 Python安装与学习环境准备1.2.1 下载miniconda1.2.2 安装miniconda1.2.3 创建一个python练习专属的conda虚拟环境 2: Pytho…

【制作100个unity游戏之31】用unity制作一个爬坡2d赛车小游戏

最终效果 【制作100个unity游戏之31】用unity制作一个爬坡2d赛车小游戏 前言 今天用unity制作一个简单的爬坡2d赛车小游戏 素材 https://www.spriters-resource.com/mobile/hillclimbracing/ 拼装车素材 车身添加碰撞体&#xff0c;摩檫力0 轮胎添加碰撞体和刚体&#xff0…

【VSCode实战】Golang无法跳转问题竟是如此简单

上一讲【VSCode实战】Go插件依赖无法安装 – 经云的清净小站 (skycreator.top)&#xff0c;开头说到了在VSCode中Golang无法跳转的问题&#xff0c;但文章的最后也没给出解决方案&#xff0c;只解决了安装Go插件的依赖问题。 解决了插件依赖问题&#xff0c;无法跳转的问题也离…

苍穹外卖 02

1.新增员工 controller&#xff1a; EmployeeServiceImpl&#xff1a; 实现controller里的save方法&#xff0c;要调用到mapper层的insert方法 因为员工登录成功后&#xff0c;会将id封装进jwt令牌,并响应给前端 所以后续请求中前端会携带jwt令牌。通过令牌可解析出被封装的…

C++:平衡搜索二叉树(AVL)

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;平衡搜索二叉树&#xff08;AVL&#xff09;》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 文章目录 :maple_leaf:AVL树:maple_leaf:…

速盾:分享一些防御 DDoS 攻击的措施

DDoS&#xff08;分布式拒绝服务&#xff09;攻击是指攻击者通过操纵大量的计算机或网络设备&#xff0c;向特定的目标发起大规模的网络流量&#xff0c;以消耗目标网络资源&#xff0c;造成网络服务不可用的攻击行为。为了保护网络免受DDoS攻击的影响&#xff0c;组织和个人可…

大学计算机专业主要课程及概要介绍

大学计算机专业主要课程及概要介绍 大学计算机专业是一门涵盖广泛领域的学科&#xff0c;旨在培养学生在计算机科学与技术方面的理论知识与实践能力。该专业课程设置丰富多样&#xff0c;涵盖了从基础理论到高级应用的多个方面。以下是一些主要的课程及其概要介绍&#xff1a;…

Python爬虫技术 第15节 CSS选择器基础

在使用Python进行网页爬取时&#xff0c;CSS选择器是提取HTML文档中特定元素的常用方法之一。CSS选择器基于HTML元素的结构和属性来定位和选择页面中的元素。结合Python中的BeautifulSoup库或PyQuery库等&#xff0c;可以非常高效地解析和筛选出你想要的数据。 CSS选择器基础 …

我的深度学习命令

安装依赖 pip install -r requirements.txt --index-url https://pypi.tuna.tsinghua.edu.cn/simple conda 环境: conda search pillow 查找可用版本 (或者pip search Pillow)查询当下虚拟环境 …

wodpress设置固定链接的方式和好处【SEO优化】

设置固定链接的好处 提高用户体验&#xff1a;固定链接使得网址更加直观和易于记忆&#xff0c;用户可以更容易地分享和访问文章。 优化SEO&#xff1a;搜索引擎更倾向于索引具有清晰结构的网址&#xff0c;固定链接有助于提高网站的SEO表现。 避免URL重复&#xff1a;固定链…

最常见的前端面试题

在前端面试中,各种面试题都会遇到,因此,今天我们整理了60+比较常见繁杂的面试题,希望这些面试题能够对你有所帮助。 当然,这些面试题的答案都不是标准答案,只是对答案做了一个简介明了的说明,希望可以快速帮助你梳理重点核心内容。 这些答案可以作为参考,但是不能作为…