MySQL中的正则

正则表达式(SQL中的应用)

正则表达式(Regular Expression,简称Regex)是一种用于匹配字符串的强大工具。在MySQL中,正则表达式可以用于模糊查询和数据清洗,极大地提升了数据处理的灵活性和效率。本文将详细介绍正则表达式在MySQL中的应用,包括模糊查询和数据清洗的具体实现。只需要会用一些基础的就行,需要的时候随时去网上找就行了

1. 正则表达式简介

正则表达式是一种模式匹配工具,通过特定的语法和规则来描述字符串的结构。常见的正则表达式符号包括:

普通字符:

  • a-zA-Z0-9:匹配任意一个字母或数字字符。
  • a:匹配字符 ‘a’。
  • abc:匹配字符串 “abc”。

元字符:

  • .:匹配除换行符外的任何单个字符。
  • ^:匹配字符串的开始位置。
  • $:匹配字符串的结束位置。
  • *****:匹配前面的子表达式零次或多次。
  • +:匹配前面的子表达式一次或多次。
  • ?:匹配前面的子表达式零次或一次。
  • |:表示“或”操作符,匹配左边或右边的表达式。

转义字符

  • \:用于转义字符,使得元字符可以作为普通字符使用。例如, \\. 匹配字符 ‘.’。

字符类

  • [abc]:匹配方括号内的任意一个字符(a、b 或 c)。
  • [^abc]:匹配任何不在方括号内的字符。
  • [a-z]:匹配任何一个小写字母。
  • [A-Z]:匹配任何一个大写字母。
  • [0-9]:匹配任何一个数字。

预定义字符类

  • \d:匹配任何一个数字字符,相当于 [0-9]
  • \D:匹配任何一个非数字字符,相当于 [^0-9]
  • \w:匹配任何一个字母、数字或下划线字符,相当于 [a-zA-Z0-9_]
  • \W:匹配任何一个非字母、非数字、非下划线字符,相当于 [^a-zA-Z0-9_]
  • \s:匹配任何一个空白字符,包括空格、制表符、换页符等。
  • \S:匹配任何一个非空白字符。

边界匹配

  • \b:匹配一个单词边界,即字母与非字母之间的位置。
  • \B:匹配非单词边界的位置。

分组和捕获

  • ():用于分组和捕获子表达式。组可以记忆匹配的文本,稍后可以使用。
  • (?):用于分组但不捕获匹配的文本。

量词

  • {n}:匹配前面的子表达式恰好 n 次。
  • {n,}:匹配前面的子表达式至少 n 次。
  • {n,m}:匹配前面的子表达式至少 n 次,但不超过 m 次。

示例

  1. 匹配邮箱地址

    ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
    

    解释:

    • ^:匹配字符串的开始。
    • [a-zA-Z0-9._%+-]+:匹配一个或多个字母、数字、点、下划线、百分号、加号或减号。
    • @:匹配 ‘@’ 字符。
    • [a-zA-Z0-9.-]+:匹配一个或多个字母、数字、点或减号。
    • \.:匹配 ‘.’ 字符。
    • [a-zA-Z]{2,}:匹配至少两个字母。
    • $:匹配字符串的结束。
  2. 匹配电话号码(仅数字)

    ^\d{10}$
    

    解释:

    • ^:匹配字符串的开始。
    • \d{10}:匹配恰好10个数字。
    • $:匹配字符串的结束。
  3. 匹配日期(格式:YYYY-MM-DD)

    ^\d{4}-\d{2}-\d{2}$
    

    解释:

    • ^:匹配字符串的开始。
    • \d{4}:匹配四个数字(年)。
    • -:匹配 ‘-’ 字符。
    • \d{2}:匹配两个数字(月)。
    • -:匹配 ‘-’ 字符。
    • \d{2}:匹配两个数字(日)。
    • $:匹配字符串的结束。
  4. 匹配以特定字母开头的字符串

    ^[A-Ma-m]
    

    解释:

    • ^:匹配字符串的开始。
    • [A-Ma-m]:匹配大写字母 A 到 M 或小写字母 a 到 m。
2. MySQL中的正则表达式

在MySQL中,REGEXPRLIKE 是用于正则表达式匹配的关键字,二者功能相同,可以互换使用。

3. 正则表达式模糊查询

模糊查询用于查找符合特定模式的记录,这在搜索和过滤数据时非常有用。

3.1 查找以特定字母开头的用户名

假设我们想查找所有以’A’开头的用户名:

SELECT *
FROM users
WHERE name REGEXP '^A';

如果要查找以A到M字母开头的用户名,可以使用字符集:

SELECT *
FROM users
WHERE name REGEXP '^[A-M]';
3.2 查找包含特定字符的记录

我们可以查找用户名中包含数字的记录:

SELECT *
FROM users
WHERE name REGEXP '[0-9]';
4. 数据清洗

数据清洗是指对数据进行清理和格式化,使其符合预期的格式或标准。正则表达式在数据清洗中非常有效。

4.1 清理电话号码中的非数字字符

假设我们有一个 phone 字段,包含用户的电话号码,但可能包含一些非数字字符(如括号、空格或连字符)。我们可以使用正则表达式清理这些非数字字符:

UPDATE users
SET phone = REGEXP_REPLACE(phone, '[^0-9]', '');

上述查询将删除 phone 字段中的所有非数字字符,只保留数字。

4.2 替换不规范的字符串

假设我们有一个 address 字段,其中包含一些缩写,需要将其替换为全称。例如,将’Rd.‘替换为’Road’:

UPDATE users
SET address = REGEXP_REPLACE(address, 'Rd\\.', 'Road');
4.3 标准化数据格式

假设我们有一个日期字段 birthdate,其中的日期格式不统一。我们可以使用正则表达式将所有日期格式标准化为 YYYY-MM-DD

UPDATE users
SET birthdate = STR_TO_DATE(REGEXP_REPLACE(birthdate, '^(\\d{2})/(\\d{2})/(\\d{4})$', '\\3-\\1-\\2'), '%Y-%m-%d')
WHERE birthdate REGEXP '^(\\d{2})/(\\d{2})/(\\d{4})$';

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

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

相关文章

在ubuntu中创建容器并挂载windows共享的文件(SMB挂载到本地后,本地的文件再挂载到容器中)

Ubuntu关闭防火墙的方法如下: 打开终端,输入 sudo ufw status 回车,查看防火墙状态,inactive是关闭,active是开启。使用 sudo ufw enable 开启防火墙。使用 sudo ufw disable 关闭防火墙。打开“系统设置”&#xff…

[Shell编程学习路线]——for循环应用技巧 语法和案例

🏡作者主页:点击! 🛠️Shell编程专栏:点击! ⏰️创作时间:2024年6月20日16点21分 🀄️文章质量:96分 目录 ————前言———— for 循环语句 基本结构 图示原理…

【启明智显产品分享】Model3工业级HMI芯片详解系列专题(三):安全、稳定、高防护

芯片作为电子设备的核心部件,,根据不同的应用领域被分为不同等级。工业级芯片适用于工业自动化、控制系统和仪器仪表等领域,对芯片的安全、稳定、防护能力等等有着较高的要求。这些芯片往往需要具备更宽的工业温度范围,能够在更恶…

深度学习归一化与正则化

文章目录 深度学习归一化与正则化1.归一化(Normalization)2.正则化(Regularization) 深度学习归一化与正则化 1.归一化(Normalization) 定义:归一化是指通过某种算法将输入数据或神经网络层的激活值处理后限制在我们需要的特定范围内。它的目的是为了方便后续的数…

已知一条直线经过两个点,使用Python求直线外其中一个点到直线的距离

已知一条直线经过两个点 P1(x1, y1) 和 P2(x2, y2),求直线外其中一个点 P3(x3, y3) 到直线的距离可以通过以下步骤计算: 1、计算直线的斜率 m 和截距 b。 2、使用点到直线的距离公式计算 P3 到直线的距离。 距离公式为: 距离 |(m*x3-y3 b)…

分布式锁三种方案

基于数据库的分布式锁(基于主键id和唯一索引) 1基于主键实现分布式锁 2基于唯一索引实现分布式锁 其实原理一致,都是采用一个唯一的标识进行判断是否加锁。 原理:通过主键或者唯一索性两者都是唯一的特性,如果多个…

抉择与未来:高考后专业与学校的深度选择思考

引言 随着2024年高考的尘埃落定,数百万考生及其家庭正面临一个至关重要的决策:在有限的分数条件下,是优先选择专业还是学校?这一选择不仅影响着个人的未来职业道路,也关系到大学生活的质量和个人综合素质的培养。本文将…

git 指定某些文件上传不进行冲突检测

文章目录 使用场景配置 .gitattributes配置 .git/config 使用场景 让某些特定文件在 Git 中总是被本地版本覆盖,不进行差异比较这对于某些自动生成的文件或特定配置文件非常有用,因为你可以避免不必要的合并冲突和差异比较 配置 .gitattributes .gita…

【单片机】DS2431芯片,读写128个字节,程序

ds2431pt&r stm32读写程序&#xff1a; 部分程序&#xff1a; #include "sys.h" #include "delay.h" #include "usart.h"#include <stdio.h> #include <stdlib.h> #include <string.h>#include "sys.h" #incl…

2.00002 查询树初体验

文章目录 瞅一眼查询树相关的结构体Var (primnodes.h : 247)enum RTEKind (parsenodes.h :1026)RangeTblEntry (parsenodes.h :1041)RangeTblRef (primnodes.h :2215)JoinExpr (primnodes.h:2249)FromExpr (primnodes.h:2277)瞅一眼查询树 typedef struct Query (parsenodes.h…

参茸网元宇宙 推进农业保险高质量发展

近日&#xff0c;由中国农业大学国家农业农村保险研究中心、国家农业农村发展研究院、经济管理学院等主办的“2024‘三农’保险发展论坛”在北京举行。论坛主题为“持续推进农业保险高质量发展”。 与会专家表示&#xff0c;近年来&#xff0c;我国新型农业经营主体数量持续增长…

openEuler搭建hadoop Standalone 模式

Standalone 升级软件安装常用软件关闭防火墙修改主机名和IP地址修改hosts配置文件下载jdk和hadoop并配置环境变量配置ssh免密钥登录修改配置文件初始化集群windows修改hosts文件测试 1、升级软件 yum -y update2、安装常用软件 yum -y install gcc gcc-c autoconf automake…

Java编译

编程语言分类 通常我们将编程语言分为高级语言和低级语言&#xff0c;通常高级语言因为其易用性和可移植性而被广泛使用&#xff0c;而低级语言在需要对硬件进行精细控制时非常有用&#xff0c;例如在嵌入式系统编程或操作系统开发中。 高级语言更接近人类语言&#xff0c;易于…

现实网络中排障经验

将某工作站连接到交换机上的几个端口后&#xff0c;无法Ping通局域网内其它电脑&#xff0c;但桌面上“本地连接”图标仍然显示网络连通。后来经过排查&#xff0c;发现由于各种交换机配置都不一样&#xff0c;在配置交换机时&#xff0c;会很容易出现配置错误。所以建议&#…

awtk踩坑记录三:移植awtk-mvvm到Awtk Designer项目

从github下载并编译awtk, awtk-mmvm awtk: https://github.com/zlgopen/awtk/tree/master awtk-mvvm: https://github.com/zlgopen/awtk-mvvm 用awtk-designer新建项目并打开项目目录 首先修改project.json&#xff0c;使其awtk和awtk-mvvm指向上个步骤下载的路径&#xff0c…

【APP_汽修宝】数据采集案例APP_数据解密分析

如果不会写代码&#xff0c;那就出书、写博客、做视频、录播客。 &#x1f4da; S35赛季末王者昭君罗 关键代码定位 使用方法【逆向-快速定位关键代码】通过hook常用函数HashMap方法 动态分析 下面是我们通过访问目标页面时 Frida hook 捕获HashMap的调…

Linux下手动修改服务器时间(没网环境下)

在客户服务器上更新程序时&#xff0c;发现服务器时间不对&#xff0c;现在应该是下午13:44:00&#xff0c;但服务器却显示为&#xff1a;21:40:53&#xff0c;所有是不对的。 date解决办法&#xff1a; 1、由于服务器是没有网的&#xff0c;只能手动设置时间&#xff0c;输入…

【YashanDB认证】-国产数据库-崖山的学习认证之路

一、前序 随着近几年国产数据库的发展&#xff0c;如今的很多的项目中对于底层数据核心数据库选型&#xff0c;越来越要求要符合信创标准&#xff0c;所以在日常工作中对国产数据库的关注也在增加。时常会关注国产数据库的一些实事信息&#xff0c;也会积极参与到各种推广活动&…

【Java核心技术12】面向对象编程(OOP):深入理解类与对象

引言 所有文章均为原创验证&#xff0c;您随手的 关注、点赞、收藏 是我创作最大的动力。 示例代码地址&#xff1a;https://gitee.com/code-in-java/csdn-blog.git Java&#xff0c;作为一种面向对象的编程语言&#xff0c;其核心思想是将数据和操作这些数据的方法封装在一起。…

MySQL NDB Cluster 8.4 这是什么版本

MySQL NDB Cluster 8.4 这是什么版本 MySQL NDB Cluster 8.4 是 MySQL 数据库的一种集群版本&#xff0c;主要用于需要高可用性、高性能和横向扩展的应用程序。NDB Cluster 通过分布式内存存储来实现这些特性&#xff0c;适合于需要快速响应时间和高可用性的场景&#xff0c;如…