MySQL 正则表达式详细说明

目录

MySQL 正则表达式详细说明

1. 基本操作符:REGEXP 和 RLIKE

2. 常用正则表达式模式

3. MySQL 正则表达式函数(MySQL 8.0+)

4. 示例查询

5. 注意事项

6. 总结


MySQL 正则表达式详细说明

MySQL 支持正则表达式(Regular Expression),用于在查询中进行复杂的模式匹配。它主要通过 REGEXPRLIKE 操作符实现(两者功能相同),以及 MySQL 8.0 及以上版本提供的扩展函数。以下内容将逐步解释其用法、模式和注意事项。

1. 基本操作符:REGEXP 和 RLIKE
  • REGEXPRLIKE 是等价的,用于在 WHERE 子句中匹配字符串模式。
  • 语法示例:
    SELECT * FROM 表名 WHERE 列名 REGEXP '模式';
    

  • 如果匹配成功,返回 1(真);否则返回 0(假)。
  • 示例:查询所有以 "a" 开头的用户名。
    SELECT * FROM users WHERE username REGEXP '^a';
    

2. 常用正则表达式模式

MySQL 正则表达式基于 POSIX 扩展正则表达式(ERE)标准。以下是常见元字符和模式:

  • 基本匹配
    • .:匹配任意单个字符(除换行符外),例如 'a.c' 匹配 "abc" 或 "aac"。
    • ^:匹配字符串开头,例如 '^start' 匹配以 "start" 开头的字符串。
    • $:匹配字符串结尾,例如 'end$' 匹配以 "end" 结尾的字符串。
  • 字符类
    • [abc]:匹配 "a"、"b" 或 "c" 中的任意一个字符。
    • [^abc]:匹配除 "a"、"b"、"c" 外的任意字符。
    • [a-z]:匹配任意小写字母。
  • 量词(控制匹配次数):
    • *:匹配前一个元素零次或多次,例如 'ab*c' 匹配 "ac"、"abc"、"abbc" 等。
    • +:匹配前一个元素一次或多次,例如 'ab+c' 匹配 "abc"、"abbc",但不匹配 "ac"。
    • ?:匹配前一个元素零次或一次,例如 'ab?c' 匹配 "ac" 或 "abc"。
    • {n}:匹配前一个元素恰好 $n$ 次,例如 'a{3}' 匹配 "aaa"。
    • {n,}:匹配前一个元素至少 $n$ 次,例如 'a{2,}' 匹配 "aa"、"aaa" 等。
    • {n,m}:匹配前一个元素 $n$ 到 $m$ 次,例如 'a{2,4}' 匹配 "aa"、"aaa" 或 "aaaa"。
  • 分组和或操作
    • |:表示“或”,例如 'apple|banana' 匹配 "apple" 或 "banana"。
    • ():用于分组,例如 '(ab)+' 匹配 "ab"、"abab" 等。
  • 转义字符
    • 使用 \\ 转义特殊字符,例如 '\\.' 匹配字面点号 "."。
3. MySQL 正则表达式函数(MySQL 8.0+)

从 MySQL 8.0 开始,引入了更强大的函数:

  • REGEXP_LIKE():检查是否匹配模式,语法 REGEXP_LIKE(字符串, '模式')
    SELECT REGEXP_LIKE('hello', '^h') AS result; -- 返回 1
    

  • REGEXP_INSTR():返回匹配子串的起始位置,语法 REGEXP_INSTR(字符串, '模式')
    SELECT REGEXP_INSTR('abc123', '[0-9]+') AS position; -- 返回 4(数字起始位置)
    

  • REGEXP_SUBSTR():提取匹配的子串,语法 REGEXP_SUBSTR(字符串, '模式')
    SELECT REGEXP_SUBSTR('email: test@example.com', '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}') AS email; -- 返回 "test@example.com"
    

  • REGEXP_REPLACE():替换匹配的子串,语法 REGEXP_REPLACE(字符串, '模式', '替换文本')
    SELECT REGEXP_REPLACE('Phone: 123-456', '[0-9]{3}-[0-9]{3}', '***-***') AS masked; -- 返回 "Phone: ***-***"
    

4. 示例查询
  • 匹配数字序列:查询包含至少 3 位数字的字符串。
    SELECT * FROM data WHERE content REGEXP '[0-9]{3,}';
    

  • 验证邮箱格式:检查是否符合标准邮箱模式。
    SELECT * FROM users WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$';
    

  • 提取和替换:在 MySQL 8.0 中,提取日期部分。
    SELECT REGEXP_SUBSTR('2023-10-05 event', '[0-9]{4}-[0-9]{2}-[0-9]{2}') AS date; -- 返回 "2023-10-05"
    

5. 注意事项
  • 区分大小写:MySQL 默认不区分大小写。如需区分,使用 BINARY 关键字或 REGEXP_LIKE 的选项,例如 REGEXP_LIKE(str, 'pattern', 'c')('c' 表示大小写敏感)。
  • 性能影响:正则表达式比简单 LIKE 查询更慢,避免在大表上频繁使用。优先考虑索引或全文搜索。
  • 版本兼容性
    • REGEXP/RLIKE 支持所有 MySQL 版本。
    • 高级函数(如 REGEXP_REPLACE)仅限 MySQL 8.0+。
    • 旧版本(如 MySQL 5.7)可能不支持某些模式(如 Unicode 字符类)。
  • 转义规则:在 SQL 字符串中,需双重转义特殊字符。例如,匹配点号使用 '\\.',而非单反斜杠。
  • 错误处理:无效模式会导致查询错误。测试模式前,可使用简单值验证。
6. 总结

MySQL 正则表达式提供灵活的文本匹配能力,适用于数据验证、清洗和提取。核心操作符 REGEXP 适用于基础匹配,而 MySQL 8.0+ 的函数扩展了功能。使用时,注意模式语法、性能优化和版本限制。推荐先在小型数据集上测试模式,再应用到生产环境。

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

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

相关文章

c++之 栈浅析

C之栈浅析 概要 通过可视化游戏梳理栈特点以及栈操作方式. 学习栈的工作原理就像往糖果罐里放糖果和拿糖果一样简单! 栈特点 先进后出 技术名词解释 LIFO LIFO -> Last In, First Out 后进先出 可视化小游戏 游戏传送门

C++ 算术函子

在 C 中&#xff0c;算术函子&#xff08;Arithmetic Functors&#xff09; 是标准库 <functional> 中提供的一组函数对象&#xff0c;用于封装基本的算术运算&#xff08;如加、减、乘、除等&#xff09;。它们本质上是类模板&#xff0c;重载了 operator()&#xff0c;…

Flutter 事件总线 Event Bus

文章目录概要核心原理基本使用步骤优点注意事项适用场景小结概要 提示&#xff1a;这里可以添加技术概要 event_bus 是一个常用的第三方库&#xff0c;用于实现跨组件 / 跨页面的事件通信&#xff0c;基于发布 - 订阅模式&#xff08;Publish-Subscribe Pattern&#xff09;工…

数据库管理系统:入门需要了解的内容

数据库管理系统&#xff1a;数字化时代的基石 在信息技术飞速发展的今天&#xff0c;我们生活在一个被数据包围的世界里。从日常使用的社交媒体、电商平台&#xff0c;到企业运营的核心业务系统&#xff0c;再到政府部门的政务管理&#xff0c;数据无处不在。而数据库管理系统&…

安装CST时,报错问题处理

今天安装这个软件的时候&#xff0c;发现一个问题一直处理不了&#xff0c;然后看网上的一些解决方法&#xff0c;最终得到处理&#xff0c;这里就简单记录下解决方法。问题&#xff1a;处理方案&#xff1a;1.问题原因&#xff1a;crack中的CST Studio Suite 2022未配置成功。…

分治-快排-215.数组中的第k个最大元素-力扣(LeetCode)

一、题目解析1、需返回排序好的第k个最大元素2、要求时间复杂度为O(N)二、算法原理解法1&#xff1a;堆排序(大根堆) k*O(N)借用大堆的性质&#xff0c;将元素插入到大堆中&#xff0c;按照k输出堆顶第k个元素解法2&#xff1a;堆排序(小根堆) (N-k)*O(logN)先建k个小堆&#x…

新手向:Python实现图片转ASCII艺术

Python实现图片转ASCII艺术&#xff1a;从零开始的完整指南Python实现图片转ASCII艺术的技术解析ASCII艺术是一种使用字符组合来表现图像的技术&#xff0c;这种技术源于早期计算机显示器的图形限制&#xff0c;如今已成为一种独特的数字艺术形式。ASCII艺术的应用场景十分广泛…

6.类与对象(二)

总结 本章写了封装、static成员以及代码块。 一、封装 1.封装的概念 封装简单来说就是被密封起来&#xff08;不让我们看见的东西&#xff09;&#xff0c;即被隐藏。 对于用户来说&#xff0c;并不需要关心的类&#xff0c;所实现的细节就会被封装&#xff08;隐藏&#x…

流形折叠与条件机制

1. 为什么要防止流形折叠&#xff08;mode collapse&#xff09; 流形折叠 生成器只学会输出极少数甚至单一模式&#xff08;mode&#xff09;的样本&#xff0c;而完全忽略数据分布的多样性。 后果一句话&#xff1a;“模型看起来生成了很多图&#xff0c;其实都在重复同一张…

《从零构建大语言模型》学习笔记2,文本数据处理1(以及tiktoken库无法下载gpt2参数,调用get_encoding时SSL超时的解决方法)

《从零构建大语言模型》学习笔记2&#xff0c;文本数据处理1 文章目录《从零构建大语言模型》学习笔记2&#xff0c;文本数据处理1前言1、分词2.将把提取出来的词元转换为数字ID3.添加特殊上下文标记4. 字节对编码&#xff08;以及tiktoken库无法下载gpt2参数&#xff0c;调用g…

【AI工具】解放双手,操控浏览器的工具对比,来了

&#x1f4d2;前言在github上面&#xff0c;有几个操作浏览器的mcp工具&#xff1a;browser-use / browser-usemicrosoft / playwright-mcpAgentDeskAI / browser-tools-mcphangwin / mcp-chrome想知道他们的区别吗&#xff0c;想知道那个更适合你吗&#xff0c;想。。。&#…

Linux 操作系统基础知识总结

1、操作系统总体介绍 CPU&#xff1a; 就像人的大脑&#xff0c;主要负责相关事情的判断以及实际处理的机制。 查询指令&#xff1a; cat /proc/cpuinfo 内存&#xff1a; 大脑中的记忆区块&#xff0c;将皮肤、眼睛等所收集到的信息记录起来的地方&#xff0c;以供CPU进行判断…

cudagraph 本质详解

理解 CUDA Graph 的本质,关键在于理解它解决了什么问题,以及它通过什么机制来解决这个问题。 一、 核心问题:传统 CUDA 编程的“CPU 瓶颈” 在 CUDA Graph 出现之前,我们通常使用 CUDA Stream 来向 GPU 提交任务。这是一个动态的过程: CPU 作为指挥官:CPU 循环地、逐条…

Spring MVC 父子容器深度解析:原理、实战与优化

1. 父子容器的定义与设计初衷一句话总结&#xff1a;父子容器的核心价值在于解耦 Web 层与业务层&#xff0c;实现职责分离与上下文隔离。1.1 父子容器的层次关系在 Spring MVC 中&#xff0c;容器分为两类&#xff1a;父容器&#xff08;Root ApplicationContext&#xff09;&…

AI赋能SEO关键词优化策略

内容概要 人工智能&#xff08;AI&#xff09;技术正深刻改变着搜索引擎优化&#xff08;SEO&#xff09;的实践方式&#xff0c;尤其在关键词研究这一核心领域带来了革命性的影响。本文聚焦于AI如何赋能SEO关键词优化策略&#xff0c;系统性地探讨其核心价值与应用路径。我们将…

虚拟机Ubuntu图形化界面root用户登录错误

当在 Ubuntu 图形界面登录 root 用户出现错误无法进入时 1. 检查 PAM 配置文件 PAM&#xff08;Pluggable Authentication Modules&#xff0c;可插拔认证模块&#xff09;负责管理用户认证相关的策略。图形登录界面的 PAM 配置文件通常是 /etc/pam.d/gdm-password 。以管理员权…

【杂谈】-逆缩放悖论:为何更多思考会让AI变“笨“?

逆缩放悖论&#xff1a;为何更多思考会让AI变"笨"&#xff1f; 文章目录逆缩放悖论&#xff1a;为何更多思考会让AI变"笨"&#xff1f;1、解码逆缩放现象2、AI 推理失效的五大症结3、AI 推理应对复杂度的策略图谱4、人工智能评估体系的反思5、人工智能推理…

强制用户更改WordPress密码的重要性及实现方法

确保 WordPress 网站的安全性是每位网站管理者的重要任务。在网络安全日益受到关注的今天&#xff0c;为用户提供安全、稳定的网络环境至关重要。而一个有效的方法就是强制用户定期更改密码。这篇文章将介绍为什么要强制用户更改密码以及如何在 WordPress 中实现这一功能。同时…

计算机基础速通--数据结构·串的应用

如有问题大概率是我的理解比较片面&#xff0c;欢迎评论区或者私信指正。 友友们&#xff0c;我遇到了一个大问题&#xff0c;技术类的英文面&#xff08;ai应用开发/java后端偏金融方向&#xff09;该如何准备&#xff1f;本人英语就过了个六级&#xff0c;脑阔疼额。友友们有…

05--STL认识(了解)

1. STL概念——标准模板库 STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 STL与CPP标准库的关系&#xff1a; 2. STL的版本 3. STL的组成 4. STL…