轻松上手MYSQL:精通正则表达式,数据匹配不再难!

news2024/9/19 10:46:33

🌈 个人主页:danci_
🔥 系列专栏:《设计模式》《MYSQL》
💪🏻 制定明确可量化的目标,坚持默默的做事。


✨欢迎加入探索MYSQL正则表达式函数之旅✨
    👋 大家好!文本学习和探索MYSQL正则表达式函数。👋 正则表达式,作为数据库查询的利器,在处理复杂数据匹配时无疑是MySQL用户的得力助手。《MySQL正则表达式》将为您揭开这一强大工具的面纱,带您从基础入门,逐步掌握高级技巧。无论是文本搜索、数据筛选还是复杂模式匹配,正则表达式都能为您的查询增添无限可能。准备好探索这一神奇语言了吗?让我们一起进入MySQL正则表达式的世界,发现数据操作的新维度。

目录

一、REGEXP操作符

二、NOT REGEXP操作符

三、RLIKE操作符

四、NOT RLIKE操作符

五、REGEXP_LIKE函数

六、REGEXP_REPLACE函数

七、REGEXP_INSTR函数

八、REGEXP_SUBSTR函数


一、REGEXP操作符

在 MySQL 中, REGEXP 操作符检查一个字符串和一个正则表达式是否匹配。
REGEXP 操作符等同于 RLIKE 操作符和 REGEXP_LIKE() 函数。REGEXP 不区分大小写。
NOT REGEXP 操作符是 REGEXP 操作符的否定操作。

语法:

str REGEXP regexp

参数说明:

  • str:必需的。一个字符串。
  • regexp:必需的。正则表达式。

返回值:

  • 若字符串 str 和正则表达式 regexp 匹配,返回 1,否则返回 0。
  • 若任意一个参数为 NULL,返回 NULL。

这里列出了几个常见的 REGEXP示例:

SELECT
    'hello' REGEXP '^[a-z]+$',
    'hello' REGEXP '^[A-Z]+$',
    '12345' REGEXP '[0-9]+$',
    '12345' REGEXP '^\\d+$',
    '123ab' REGEXP '^\\d*$',
    '123ab' REGEXP '^.*$'

输出如下:

'hello' REGEXP '^[a-z]+$': 1
'hello' REGEXP '^[A-Z]+$': 1
 '12345' REGEXP '[0-9]+$': 1
  '12345' REGEXP '^\\d+$': 1
  '123ab' REGEXP '^\\d*$': 0
    '123ab' REGEXP '^.*$': 1

二、NOT REGEXP操作符

在 MySQL 中, NOT REGEXP 操作符检查一个字符串和一个正则表达式是否不匹配。
NOT REGEXP 操作符是 REGEXP 操作符的否定操作。NOT REGEXP 不区分大小写。

语法:

str NOT REGEXP regexp

参数说明:

  • str:必需的。一个字符串。
  • regexp:必需的。正则表达式。

返回值:

  • 若字符串 str 和正则表达式 regexp 不匹配,返回 1,否则返回 0。
  • 若任意一个参数为 NULL,返回 NULL。

这里列出了几个常见的 NOT REGEXP 示例:

SELECT
    'hello' NOT REGEXP '^[a-z]+$',
    'hello' NOT REGEXP '^[A-Z]+$',
    '12345' NOT REGEXP '[0-9]+$',
    '12345' NOT REGEXP '^\\d+$',
    '123ab' NOT REGEXP '^\\d*$',
    '123ab' NOT REGEXP '^.*$'

输出如下:

'hello' NOT REGEXP '^[a-z]+$': 0
'hello' NOT REGEXP '^[A-Z]+$': 0
 '12345' NOT REGEXP '[0-9]+$': 0
  '12345' NOT REGEXP '^\\d+$': 0
  '123ab' NOT REGEXP '^\\d*$': 1
    '123ab' NOT REGEXP '^.*$': 0

三、RLIKE操作符

在 MySQL 中, RLIKE 操作符检查一个字符串和一个正则表达式是否匹配。
RLIKE 操作符等同于 REGEXP 操作符和 RLIKE_LIKE() 函数。RLIKE 不区分大小写。

语法:

str RLIKE regexp

参数说明:

  • str:必需的。一个字符串。
  • regexp:必需的。正则表达式。

返回值:

  • 若字符串 str 和正则表达式 regexp 匹配,返回 1,返回 0。
  • 若任意一个参数为 NULL,返回NULL。

这里列出了几个常见的 RLIKE 示例:

SELECT
    'hello' RLIKE '^[a-z]+$',
    'hello' RLIKE '^[A-Z]+$',
    '12345' RLIKE '[0-9]+$',
    '12345' RLIKE '^\\d+$',
    '123ab' RLIKE '^\\d*$',
    '123ab' RLIKE '^.*$'

输出:

'hello' RLIKE '^[a-z]+$': 1
'hello' RLIKE '^[A-Z]+$': 1
 '12345' RLIKE '[0-9]+$': 1
  '12345' RLIKE '^\\d+$': 1
  '123ab' RLIKE '^\\d*$': 0
    '123ab' RLIKE '^.*$': 1

四、NOT RLIKE操作符

在 MySQL 中, NOT RLIKE 操作符检查一个字符串是否和一个正则表达式不匹配。
NOT RLIKE 操作符是 RLIKE 操作符的否定操作。

语法:

str NOT RLIKE regexp

参数说明:

  • str:必需的。一个字符串。
  • regexp:必需的。正则表达式。

返回值:

  • 若字符串 str 和正则表达式 regexp 不匹配,返回 1,否则返回 0。
  • 若任意一个参数为 NULL,NULL。

这里列出了几个常见的 NOT RLIKE 示例

SELECT
    'hello' NOT RLIKE '^[a-z]+$',
    'hello' NOT RLIKE '^[A-Z]+$',
    '12345' NOT RLIKE '[0-9]+$',
    '12345' NOT RLIKE '^\\d+$',
    '123ab' NOT RLIKE '^\\d*$',
    '123ab' NOT RLIKE '^.*$'

输出:

'hello' NOT RLIKE '^[a-z]+$': 0
'hello' NOT RLIKE '^[A-Z]+$': 0
 '12345' NOT RLIKE '[0-9]+$': 0
  '12345' NOT RLIKE '^\\d+$': 0
  '123ab' NOT RLIKE '^\\d*$': 1
    '123ab' NOT RLIKE '^.*$': 0

五、REGEXP_LIKE函数

MySQL REGEXP_LIKE() 函数检查一个字符串是否和一个正则表达式是否匹配。
REGEXP 和 RLIKE 操作符等同于 REGEXP_LIKE() 函数。
默认情况下, REGEXP_LIKE() 函数执行不区分大小写的匹配。

注:MYSQL8支持此函数,MYSQL5版本不支持此函数

语法:

REGEXP_LIKE(str, regexp)
REGEXP_LIKE(str, regexp, mode)

参数说明:

  • str:必需的。一个字符串。
  • regexp:必需的。正则表达式。
  • mode:可选的。执行匹配采用的模式。可使用以下其中一个或多个:
    • c: 区分大小写
    • i: 不区分大小写
    • m: 多行匹配模式
    • n: 点 . 可以匹配行结束
    • u: 仅限 unix 行结尾
  • 如果匹配模式存在矛盾的选项,则以最右边的为准。

返回值:

  • 若字符串 str 和正则表达式 regexp 匹配,返回 1,否则返回 0。
  • 若 str 或者 regexp 为 NULL,返回 NULL

这里列出了几个常见的 REGEXP_LIKE() 示例:

SELECT
    REGEXP_LIKE('hello', '^[a-z]+$'),
    REGEXP_LIKE('hello', '^[A-Z]+$'),
    REGEXP_LIKE('12345', '[0-9]+$'),
    REGEXP_LIKE('12345', '^\\d+$'),
    REGEXP_LIKE('123ab', '^\\d*$'),
    REGEXP_LIKE('123ab', '^.*$')

输出:

     REGEXP_LIKE('hello', '^[a-z]+$'): 1
     REGEXP_LIKE('hello', '^[A-Z]+$'): 1
      REGEXP_LIKE('12345', '[0-9]+$'): 1
       REGEXP_LIKE('12345', '^\\d+$'): 1
       REGEXP_LIKE('123ab', '^\\d*$'): 0
         REGEXP_LIKE('123ab', '^.*$'): 1

 可以将匹配模式设置为 'c' 来启用匹配时区分大小写(不区分大小写是 i ):

SELECT REGEXP_LIKE('hello', '^[A-Z]+$', 'c');

输出:

+---------------------------------------+
| REGEXP_LIKE('hello', '^[A-Z]+$', 'c') |
+---------------------------------------+
|                                     0 |
+---------------------------------------+

六、REGEXP_REPLACE函数

MySQL REGEXP_REPLACE() 函数在一个字符串中使用新内容替换一个和指定的正则表达式匹配的内容。
默认情况下, REGEXP_REPLACE() 函数执行不区分大小写的匹配。

注:MYSQL8支持此函数,MYSQL5版本不支持此函数

语法:

REGEXP_REPLACE(str, regexp, replacement)
REGEXP_REPLACE(str, regexp, replacement, position)
REGEXP_REPLACE(str, regexp, replacement, position, occurrence)
REGEXP_REPLACE(str, regexp, replacement, position, occurrence, mode)

参数说明:

  • str:必需的。一个字符串。
  • egexp:必需的。正则表达式。
  • replacement:必需的。用来替换的字符串。
  • position:可选的。开始搜索的起始位置。默认为从头开始。
  • occurrence:可选的。替换第几次匹配的内容。默认为替换所有匹配的内容。
  • mode:可选的。执行匹配采用的模式。可使用以下其中一个或多个:
    • c: 区分大小写
    • i: 不区分大小写
    • m: 多行匹配模式
    • n: 点 . 可以匹配行结束
    • u: 仅限 unix 行结尾
  • 如果匹配模式存在矛盾的选项,则以最右边的为准。

返回值:

  • 在 str 中使用 replacement 替换和正则表达式 regexp 匹配的内容,并返回替换后的结果。
  • strregexp 或者 replacement 为 NULL,返回 NULL

这里列出了几个常见的 REGEXP_REPLACE() 示例:

+-------------------------------------------------------+
| SELECT REGEXP_REPLACE('123 abc 456 def', '\\s+', '-') |
+-------------------------------------------------------+
| 123-abc-456-def                                       |
+-------------------------------------------------------+
+-------------------------------------------------------------+
| SELECT REGEXP_REPLACE('123 abc 456 def', '\\d+', 'X', 1, 2) |
+-------------------------------------------------------------+
| 123 abc X def                                               |
+-------------------------------------------------------------+

七、REGEXP_INSTR函数

MySQL REGEXP_INSTR() 函数从一个字符串中搜索和指定模式匹配的子串并返回的子串的索引(注:第一个位置是1,不是0)。
默认情况下, REGEXP_INSTR() 函数执行不区分大小写的匹配。

注:MYSQL8支持此函数,MYSQL5版本不支持此函数
语法:

REGEXP_INSTR(str, regexp)
REGEXP_INSTR(str, regexp, position)
REGEXP_INSTR(str, regexp, position, occurrence)
REGEXP_INSTR(str, regexp, position, occurrence, return_option)
REGEXP_INSTR(str, regexp, position, occurrence, return_option, mode)

参数说明:

  • str:必需的。一个字符串。
  • regexp:必需的。正则表达式。
  • position:可选的。开始搜索的起始位置。默认为 1
  • occurrence:可选的。第几次匹配的内容。默认为 1
  • return_option:可选的。指定返回哪一种位置索引。如果为 0,返回匹配的子串的第一个字符的位置索引;如果为 1,返回匹配的子串的后面的位置索引。默认为 0.
  • mode:可选的。执行匹配采用的模式。可使用以下其中一个或多个:
    • c: 区分大小写
    • i: 不区分大小写
    • m: 多行匹配模式
    • n: 点 . 可以匹配行结束
    • u: 仅限 unix 行结尾
  • 如果匹配模式存在矛盾的选项,则以最右边的为准。

返回值:

  • 从一个字符串 str 中搜索和指定模式 regexp 匹配的子串并返回的子串的索引。如果没有匹配到,则返回 NULL
  • str 或者 regexp 为 NULL,返回 NULL

这里列出了几个常见的 REGEXP_INSTR() 示例:

  • 匹配第一个数字(或者连续数字)的索引:
+------------------------------------------------+
| SELECT REGEXP_INSTR('123 abc 456 def', '\\d+') |
+------------------------------------------------+
|                                              1 |
+------------------------------------------------+
  • 匹配第二个数字(或者连续数字)的索引:( 第一个处为连续数字)
+------------------------------------------------------+
| SELECT REGEXP_INSTR('123 abc 456 def', '\\d+', 1, 2) |
+------------------------------------------------------+
|                                                    9 |
+------------------------------------------------------+
  • 匹配第一个数字(或连续数字)后的索引:
+---------------------------------------------------------+
| SELECT REGEXP_INSTR('123 abc 456 def', '\\d+', 1, 1, 1) |
+---------------------------------------------------------+
|                                                       4 |
+---------------------------------------------------------+
  • 执行采用模式匹配
-- 区分大小写
+--------------------------------------------------------------+
| SELECT REGEXP_INSTR('123 aaa 456 aaa', 'A{3}', 1, 1, 0, 'c') |
+--------------------------------------------------------------+
|                                                            0 |
+--------------------------------------------------------------+
-- 不区分大小写
+--------------------------------------------------------------+
| SELECT REGEXP_INSTR('123 aaa 456 aaa', 'A{3}', 1, 1, 0, 'i') |
+--------------------------------------------------------------+
|                                                            5 |
+--------------------------------------------------------------+

八、REGEXP_SUBSTR函数

MySQL REGEXP_SUBSTR() 函数从一个字符串获取和指定模式匹配的子串并返回。
默认情况下, REGEXP_SUBSTR() 函数执行不区分大小写的匹配。

注:MYSQL8支持此函数,MYSQL5版本不支持此函数

语法:

REGEXP_SUBSTR(str, regexp)
REGEXP_SUBSTR(str, regexp, position)
REGEXP_SUBSTR(str, regexp, position, occurrence)
REGEXP_SUBSTR(str, regexp, position, occurrence, mode)

参数说明:

  • str:必需的。一个字符串。
  • regexp:必需的。正则表达式。
  • position:可选的。开始搜索的起始位置。默认为 1
  • occurrence:可选的。第几次匹配的内容。默认为 1
  • mode:可选的。执行匹配采用的模式。。可使用以下其中一个或多个:
    • c: 区分大小写
    • i: 不区分大小写
    • m: 多行匹配模式
    • n: 点 . 可以匹配行结束
    • u: 仅限 unix 行结尾
  • 如果匹配模式存在矛盾的选项,则以最右边的为准。

返回值:

  • 在 str 中搜索和正则表达式 regexp 匹配的子字符串并返回。如果没有匹配到,则返回 NULL
  • 若 str 或者 regexp 为 NULL,返回 NULL

这里列出了几个常见的 REGEXP_INSTR() 示例:

  • 以下语句用来找出字符串 '123 abc 456 def' 中的第一组连续的数字:
+-------------------------------------------------+
| SELECT REGEXP_SUBSTR('123 abc 456 def', '\\d+') |
+-------------------------------------------------+
| 123                                             |
+-------------------------------------------------+
  • 如果想找出字符串 '123 abc 456 def' 中的第二组连续的数字,请使用下面的语句:
+--------------------------------------------------------+
| SELECT REGEXP_SUBSTR('123 abc 456 def', '\\d+', 1, 2); |
+--------------------------------------------------------+
| 456                                                    |
+--------------------------------------------------------+
  • 执行采用模式匹配:
-- 区分大小写
+------------------------------------------------------------+
| SELECT REGEXP_SUBSTR('123 aaa 456 aaa', 'A{3}', 1, 1, 'c') |
+------------------------------------------------------------+
|                                                            |
+------------------------------------------------------------+
-- 不区分大小写
+------------------------------------------------------------+
| SELECT REGEXP_SUBSTR('123 aaa 456 aaa', 'A{3}', 1, 1, 'i') |
+------------------------------------------------------------+
| aaa                                                        |
+------------------------------------------------------------+

    好了,今天分享到这里。希望你喜欢这次的探索之旅!不要忘记 "点赞" 和 "关注" 哦,我们下次见!🎈

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

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

相关文章

【Cesium】Cesium图层请求完成的回调

有一个业务需要用到cesium图层请求完成的回调&#xff0c;翻了好久的文档终于给我找到&#x1f336;️。 是Cesium.ImageryProvider类的一个属性readyPromise 效果如下&#xff1a; Cesium图层请求完成的回调 完整代码如下&#xff1a; <html lang"en"><h…

PCDN业务推荐

神鸟云&蘑菇云最新业务推荐 &#x1f525;短Z业务-- 支持nat0~nat4 省内调度&#xff0c;晚高峰 跑量9成 配置要求: 线路&#xff1a;单条上行30M 硬件&#xff1a;32线程 64内存条 240G系统盘 1G:2T固态盘 单价&#xff1a;移动1900 电联2500 http://oss.download.…

Mysql(四)---增删查改(进阶)

文章目录 前言1.查询操作1.1.全列查询1.2.指定列查询1.3.列名为表达式查询1.4.查询中使用别名1.5.去重查询1.6.排序1.6.2.NULL 1.7.条件查询1.8.分页查询 2.修改3.删除 前言 上一篇博客&#xff0c;我们学习了一些主键的概念&#xff0c;并且分别创造了一些示例表&#xff0c;…

通过相机来获取图片

文章目录 1. 概念介绍2. 方法与细节2.1 实现方法2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何混合选择多个图片和视频文件"相关的内容&#xff0c;本章回中将介绍如何通过相机获取图片文件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. …

Codeforces Round 966 (Div. 3)(A,B,C,D,E,F)

A. Primary Task 签到 void solve() {string s;cin>>s;bool bltrue;if(s.size()<2)blfalse;else{if(s.substr(0,2)"10"){if(s[2]0)blfalse;else if(s[2]1&&s.size()<3)blfalse; }else blfalse;}if(bl)cout<<"YES\n";else cout…

数据结构第二天

分文件编程实现&#xff1a; main.c #include <stdio.h> #include <stdlib.h> #include "seqlist.h"int main(int argc, char const *argv[]) {seqlist_p p CreateEpSeqlist();InsertIntoSeqlist(p, 0, 10);InsertIntoSeqlist(p, 1, 20);InsertIntoSeql…

打卡第四十五天:不同的子序列、两个字符串的删除操作、编辑距离

一、不同的子序列&#xff08;困难&#xff09; 题目 文章 视频 这道题目如果不是子序列&#xff0c;而是要求连续序列的&#xff0c;那就可以考虑用KMP。相对于72. 编辑距离简单了不少&#xff0c;因为本题相当于只有删除操作&#xff0c;不用考虑替换增加之类的。但相对于…

Mapreduce_Distinct数据去重

MapReduce中数据去重 输入如下的数据&#xff0c;统计其中的地址信息&#xff0c;并对输出的地址信息进行去重 实现方法&#xff1a;Map阶段输出的信息K2为想要去重的内容&#xff0c;利用Reduce阶段的聚合特点&#xff0c;对K2进行聚合&#xff0c;去重。在两阶段中&#xff…

【数据结构篇】~顺序表

顺序表前言 想要学好数据结构的三大基本功&#xff1a;1.结构体2.指针3.动态内存开辟,这三样将是贯彻整个数据结构的工具。&#xff08;可以去这里了解这三大基本功&#xff09; 顺序表也是线性表的一种&#xff0c;那线性表又是什么呢&#xff1f; 线性表&#xff08;linear …

系列:水果甜度个人手持设备检测-无损检测常用技术和方式汇总

系列:水果甜度个人手持设备检测 -- 无损检测常用技术和方式汇总 概述 无损检测以不损坏被检测对象的使用性能为前提&#xff0c;以物理或化学方法为手段&#xff0c;借助相应的设备器材&#xff0c;按照规定的技术要求&#xff0c;对材料、零部件、结构件进行有效的检验和测…

软件测试第1章 软件测试是什么

目录​​​​​​​ 内容说明 一、软件测试与质量概览需要熟悉什么 二、如何理解质量保证 三、软件测试的误区-程序员和测试的关系 四、软件测试是什么&#xff1f; 五、软件测试的目的 六、软件测试与软件质量保证 七、软件测试的必要性 八、软件测试的基本概念分析 …

HarmonyOS Next 系列之列表下拉刷新和触底加载更多数据实现(十一)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…

智碳云/高能耗企业 水-电-气-热-油-空压机等能源数据采集系统【源码】

智碳云/高能耗企业 水-电-气-热-油-空压机等能源数据采集系统【源码】 介绍基于SpringCloud的能源管理系统-能源管理平台源码-能源在线监测平台-双碳平台源码-SpringCloud全家桶-能管管理系统源码-能管系统软件架构

js 深入学习各种继承方法使用场景

前言 问题&#xff1a; JS 如何实现继承呢&#xff1f;主要有几种继承方式及分别适用于哪些场景呢&#xff1f; 我们学习高级语言&#xff0c;就必须学习面向对象&#xff0c;想要成为高手&#xff0c;就必须学习别人不会的&#xff0c;就比如JS中的继承&#xff0c;好多前端人…

ASP.NET在线交流论坛管理系统

ASP.NET在线交流论坛管理系统 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库 用户功能有个人信息管理 帖了信息管理 意见反馈信息管理 点赞管理 收藏管理 后台管理员可以进行用户管理 …

部署及使用seata

目录 1.下载seata1.7.0.zip 2.上传至云服务器&#xff0c;使用unar工具解压 3.配置application.yml&#xff0c;主要配置如下参数 4.为seata执行mysql脚本 5.配置nacos配置中心 *6.启动seata服务器 问题&#xff1a;“cause:can not register RM,err:can not connect to…

国外项目管理软件最佳实践:选型与应用

国内外主流的10款国外项目管理软件对比&#xff1a;PingCode、Worktile、Asana、Trello、Monday.com、ClickUp、Wrike、ProofHub、Zoho Projects、Hive。 在寻找适合的国外项目管理软件时&#xff0c;你是否感到不知从何选择&#xff1f;市场上琳琅满目的选项往往令人眼花缭乱&…

微软披露Office最新零日漏洞,可能导致数据泄露

近日&#xff0c;微软披露了 Office 中一个未修补的零日漏洞&#xff0c;如果被成功利用&#xff0c;可能导致敏感信息在未经授权的情况下泄露给恶意行为者。 该漏洞被追踪为 CVE-2024-38200&#xff08;CVSS 得分&#xff1a;7.5&#xff09;&#xff0c;被描述为一个欺骗漏洞…

关于xilinx的FFTIP的使用和仿真

工具&#xff1a;vivado2018.3&#xff0c;modelsim10.6d 场景&#xff1a;在进行数据进行频谱分析的时候&#xff0c;使用FPGA来完成FFT的计算可以加快数据的计算速度。 下面使用仿真完成DDS产生的数据的FFT以及IFFT。原始数据使用DDSIP产生&#xff0c;通过IP产生的波形数据…

旧手机NAS方案

这里写目录标题 1、参考2、alpine-term-v16.0-release.apk下载安装3、电脑端ssh连接3、安装docker3.1 网络配置3.2 配置APK源 1、参考 【Docker与Termux】闲置旧安卓手机上的NAS无缝部署方案 https://blog.csdn.net/AnRanGeSi/article/details/138717589 【Alpine Term】Andr…