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 业务中。 以生…

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

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

freertos的学习cubemx版

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

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

文章大纲 Python 简介1 安装Python1.1 什么是conda?1.1.1 功能与作用:1.1.2 常用命令:1.1.3 适用性: 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/ 拼装车素材 车身添加碰撞体,摩檫力0 轮胎添加碰撞体和刚体&#xff0…

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

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

苍穹外卖 02

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

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

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

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

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

【H.264】H.264详解(二)—— H264视频码流解析示例源码

文章目录 一、前言二、示例源码【1】目录结构【2】Makefile源码【3】h264parser.c源码【4】编译运行【5】源码下载地址 声明:此篇示例源码非原创,原作者雷霄骅。雷霄骅,中国传媒大学通信与信息系统专业博士生,在此向雷霄骅雷神致敬…

OpenHarmony 开发

本心、输入输出、结果 文章目录 OpenHarmony 开发前言JonathanOpenHarmony 并不是 AndroidOpenHarmony 应用迁移OpenHarmony 的开发流程OpenHarmony 开发 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csdn.net/qq_15071263 如果觉得本文对你有帮助,欢迎点赞、收藏、评…

2023IMO预选题几何第6题

锐角 △ A B C \triangle ABC △ABC 的外接圆为 ω \omega ω, 圆 I I I 与 ω \omega ω 内切于 A A A, 且与 B C BC BC 切于点 D D D. 设直线 A B AB AB, A C AC AC 分别与 I I I 交于点 P P P, Q Q Q, 点 M M M, N N N 在直线 B C BC BC 上, 满足 B B B 是 …

CeoMax总裁主题最新3.8.1破解免授权版/WordPress付费资源素材下载主题

CeoMax总裁主题最新3.8.1破解免授权版,一套WordPress付费资源素材下载的主题,感觉这是做资源站唯一一个可以和ripro媲美甚至超越的模板,UI很美,功能也很强大,有想学习的可下载搭建学习一下,仅供学习研究借鉴…

仿学校网页

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,initial-scale1.0"><title>学校网页</title> <style>.WebTop{backg…

誉天网络安全课程怎么样

学员服务质量保障讲师团队&#xff1a;平均5年课程交付经验&#xff0c;授课质量有保障辅导团队&#xff1a;实验论述辅导讲师&#xff0c;实验备考环境复刻&#xff0c;备考资料完善&#xff0c;及时更新就业服务&#xff1a;简历制作培训&#xff0c;面试技巧培训&#xff0c…

昇思MindSpore学习入门-轻量化数据处理

在资源条件允许的情况下&#xff0c;为了追求更高的性能&#xff0c;一般使用Pipeline模式执行数据变换Transforms。 基于Pipeline模式执行的最大特点是需要使用map方法&#xff0c;如下图中将Resize、Crop、HWC2CHW交由map调度&#xff0c;由其负责启动和执行给定的Transform…

R语言统计分析——控制流

参考资料&#xff1a;R语言实战【第2版】 语句&#xff08;statement&#xff09;是一条单独的R语言或一组复合语言&#xff08;包含在花括号{}中的一组R语言&#xff0c;使用分号分隔&#xff09; 条件&#xff08;cond&#xff09;是一条最终被解析为真&#xff08;TRUE&…

python黑马笔记

运算符&#xff1a; 算术运算符&#xff1a; 加 - 减 * 乘 / 除 // 整除 % 取余 ** 求平方 除法计算得出的结果都是小数 赋值运算符&#xff1a; 标准赋值&#xff1a; 复合赋值&#xff1a; 、 - 、 * 、 / 、// 、 ** 字符串&#xff1a; 字符串拓展内容&#xf…

护网紧急情况应对指南:Linux 应急响应手册

继上一篇&#xff1a;护网紧急情况应对指南&#xff1a;Windows版v1.2全新升级版 之后 收到小伙伴后台要Linux应急手册&#xff0c;今天给大家安排上。 《Linux应急手册》是一本为Linux系统管理员和运维工程师量身打造的实用指南&#xff0c;旨在帮助他们快速应对各种突发状况…