正则表达式 - 字符组

目录

一、匹配十六进制数

1. 生成测试数据

2. 编写正则表达式

3. 使用regexp函数查询验证

4. 分析与知识点

二、字符组取反

三、并集与差集

1. 匹配并集

2. 匹配差集

四、POSIX字符组

1. 匹配字母及数字

2. 匹配字母

3. 匹配非字母字符

4. 匹配空格

5. 匹配空白字符

6. 匹配ASCII范围内的字符


        字符组有时也被称为方括号表达式(bracketed expression)。字符组有助于匹配特定字符或者特定的字符序列。它们可以像字符简写式那样代表一大批字符,比如 \d 匹配的字符与 [0-9] 所匹配的字符一样。但字符组更有针对性,因此用途比简写式更广。下面是一些字符组简单例子。

  • 匹配英文元音字母:[aeiou]
  • 匹配某个范围的字符:[a-z]、[a-f]
  • 匹配一个范围的数字:[0-9]、[3-6]
  • 匹配 10~19 的偶数:\b[1][24680]\b
  • 匹配 0~99 的偶数:\b[24680]\b|\b[1-9][24680]\b
  • 匹配空格和单词字符:[_a-zA-Z0-9 \t\n\r] 或 [\w\s]

一、匹配十六进制数

        需求为找出含有十六进制数字的字符串。十六进制数字由 0-9、A-F 十六个字符构成,并且假设有三种表示形式:

  • 以 0x 或 0X 为前缀。
  • 以 $ 为前缀。
  • 以 h 或 H 为后缀。

1. 生成测试数据

set @x:=conv(54321,10,16);
insert into t_regexp(a) values
(concat('a 0x',@x,' z')),(concat('a 0X',@x,' z')),(concat('a $',@x,' z')),(concat('a $',lower(@x),' z')),(concat('a ',@x,'h z')),(concat('a ',@x,'H z')),
(concat('a 0x',@x,'h z')),(concat('a $',@x,'h z')),(concat('a $0x',@x,'h z')),(concat('a 0x$',@x,'h z')),(concat('a ^0x',@x,' z'));

2. 编写正则表达式

\s(?i)(((0x|\$)[a-f\d]+)|([a-f\d]+h))\s

3. 使用regexp函数查询验证

mysql> select a from t_regexp where a regexp '\\s(?i)(((0x|\\$)[a-f\\d]+)|([a-f\\d]+h))\\s';
+------------+
| a          |
+------------+
| a 0xD431 z |
| a 0XD431 z |
| a $D431 z  |
| a $d431 z  |
| a D431h z  |
| a D431H z  |
+------------+
6 rows in set (0.00 sec)

        可以看到查询结果包含了所有符合规则的十六进制数。

4. 分析与知识点

  • (?i) 修饰符表示后面分组不区分大小写。
  • ((0x|\\$)[a-f\\d]+) 分组表示以 0x 或 $ 开始后跟一个或多个十六进制字符。
  • ([a-f\\d]+h) 分组表示一个或多个十六进制字符,并以 h 结尾。
  • 用选择操作符 | 分别匹配两种情况。
  • 正则表达式首尾的 \s 表示只匹配整个十六进制数。注意这里不能使用 \b ,因为 \b 会将 ^、$ 等符号作为分隔符的一部分,产生错误的结果:
mysql> select a from t_regexp where a regexp '\\b(?i)(((0x|\\$)[a-f\\d]+)|([a-f\\d]+h))\\b';
+--------------+
| a            |
+--------------+
| a 0xD431 z   |
| a 0XD431 z   |
| a D431h z    |
| a D431H z    |
| a $D431h z   |
| a 0x$D431h z |
| a ^0xD431 z  |
+--------------+
7 rows in set (0.00 sec)

二、字符组取反

        对字符组取反会匹配与字符组内容不匹配的字符。比如,如果不想匹配元音字符,可以这样写:[^aeiou]。该字符组起始位置的脱字符(^)的意义就是:“不匹配这些字符”。脱字符必须出现在起始位置。

三、并集与差集

        字符组可以像集合那样操作。不是所有的实现程序都支持这项功能,但 MySQL 支持该功能。

1. 匹配并集

mysql> set @r:='[0-3[6-9]]';
Query OK, 0 rows affected (0.00 sec)

mysql> select '1' regexp @r,'5' regexp @r, '8' regexp @r\G
*************************** 1. row ***************************
'1' regexp @r: 1
'5' regexp @r: 0
'8' regexp @r: 1
1 row in set (0.00 sec)

        正则表达式处理器会匹配0到3之间的数字或者6到9之间的数字。

2. 匹配差集

mysql> set @r:='[a-z&&[^m-r]]';
Query OK, 0 rows affected (0.00 sec)

mysql> select 'a' regexp @r, 'b' regexp @r, 's' regexp @r, 'z' regexp @r, 'l' regexp @r, 'm' regexp @r, 'r' regexp @r, 'n' regexp @r\G
*************************** 1. row ***************************
'a' regexp @r: 1
'b' regexp @r: 1
's' regexp @r: 1
'z' regexp @r: 1
'l' regexp @r: 1
'm' regexp @r: 0
'r' regexp @r: 0
'n' regexp @r: 0
1 row in set (0.00 sec)

        这匹配a到z之间的字符,但其中m到r之间的字符除外。

四、POSIX字符组

        POSIX(Portable Operating System Interface,可移植操作系统接口)是 IEEE 维护的一系列标准,其中包含了一个正则表达式标准(ISO/IEC/IEEE 9945:2009)。该标准提供了一套命名的字符组,其形式为:[[:xxxx:]]。

1. 匹配字母及数字

mysql> set @r='[[:alnum:]]';
Query OK, 0 rows affected (0.00 sec)

mysql> select '0' regexp @r, '9' regexp @r, 'a' regexp @r, 'A' regexp @r, 'z' regexp @r, 'Z' regexp @r, '\n' regexp @r, '\\n' regexp @r\G
*************************** 1. row ***************************
  '0' regexp @r: 1
  '9' regexp @r: 1
  'a' regexp @r: 1
  'A' regexp @r: 1
  'z' regexp @r: 1
  'Z' regexp @r: 1
 '\n' regexp @r: 0
'\\n' regexp @r: 1
1 row in set (0.03 sec)

        [[:alnum:]] 与简写式 \w 等价。

2. 匹配字母

mysql> set @r:='[[:alpha:]]';
Query OK, 0 rows affected (0.00 sec)

mysql> select 'a' regexp @r, 'A' regexp @r, 'z' regexp @r, 'Z' regexp @r, '0' regexp @r, '9' regexp @r\G
*************************** 1. row ***************************
'a' regexp @r: 1
'A' regexp @r: 1
'z' regexp @r: 1
'Z' regexp @r: 1
'0' regexp @r: 0
'9' regexp @r: 0
1 row in set (0.02 sec)

3. 匹配非字母字符

mysql> set @r:='[[:^alpha:]]';
Query OK, 0 rows affected (0.00 sec)

mysql> select 'a' regexp @r, 'A' regexp @r, 'z' regexp @r, 'Z' regexp @r, '0' regexp @r, '9' regexp @r\G
*************************** 1. row ***************************
'a' regexp @r: 0
'A' regexp @r: 0
'z' regexp @r: 0
'Z' regexp @r: 0
'0' regexp @r: 1
'9' regexp @r: 1
1 row in set (0.11 sec)

4. 匹配空格

mysql> set @r:='[[:space:]]';
Query OK, 0 rows affected (0.00 sec)

mysql> select ' ' regexp @r, '\t' regexp @r, '\n' regexp @r, '\r' regexp @r;
+---------------+----------------+----------------+----------------+
| ' ' regexp @r | '\t' regexp @r | '\n' regexp @r | '\r' regexp @r |
+---------------+----------------+----------------+----------------+
|             1 |              1 |              1 |              1 |
+---------------+----------------+----------------+----------------+
1 row in set (0.00 sec)

5. 匹配空白字符

mysql> set @r:='[[:blank:]]';
Query OK, 0 rows affected (0.00 sec)

mysql> select ' ' regexp @r, '\t' regexp @r, '\n' regexp @r, '\r' regexp @r;
+---------------+----------------+----------------+----------------+
| ' ' regexp @r | '\t' regexp @r | '\n' regexp @r | '\r' regexp @r |
+---------------+----------------+----------------+----------------+
|             1 |              1 |              0 |              0 |
+---------------+----------------+----------------+----------------+
1 row in set (0.00 sec)

        与 [[:space:]] 不同,[[:blank:]] 不包括回车、换行符。

6. 匹配ASCII范围内的字符

mysql> set @r:='[[:ascii:]]';
Query OK, 0 rows affected (0.00 sec)

mysql> select char(0) regexp @r, char(1) regexp @r, char(127) regexp @r, char(128) regexp @r;
+-------------------+-------------------+---------------------+---------------------+
| char(0) regexp @r | char(1) regexp @r | char(127) regexp @r | char(128) regexp @r |
+-------------------+-------------------+---------------------+---------------------+
|                 1 |                 1 |                   1 |                   0 |
+-------------------+-------------------+---------------------+---------------------+
1 row in set (0.00 sec)

        [[:ascii:]] 匹配 ascii码 0~127的字符。

        下表所示为POSIX字符组。

字符组

描述

[[:alnum:]]

匹配字母或数字

[[:alpha:]]

匹配字母

[[:ascii:]]

匹配ASCII字符(共128个)

[[:blank:]]

匹配空白字符

[[:ctrl:]]

匹配控制字符

[[:digit:]]

匹配数字

[[:graph:]]

匹配图形字符

[[:lower:]]

匹配小写字符

[[:print:]]

匹配可打印字符

[[:punct:]]

匹配标点符号

[[:space:]]

匹配空格字符

[[:upper:]]

匹配大写字符

[[:word:]]

匹配单词字符

[[:xdigit:]]

匹配十六进制数字

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python】【进阶篇】14、Django创建第一个项目

目录 Django创建第一个项目1. 第一个项目BookStore1) BookStore项目创建 2. Django项目配置文件1) manage.py文件2) __init__.py文件3) settings.py文件4) urls.py文件5) wsgi.py文件 Django创建第一个项目 在上一章中,我们完成了开发环境的搭建工作。 本章我们将学…

NLP实战:基于Pytorch的文本分类入门实战

目录 一、前期准备 1.环境准备 2.加载数据 二、代码实战 1.构建词典 2.生成数据批次和迭代器 3. 定义模型 4. 定义实例 5.定义训练函数与评估函数 6.拆分数据集并运行模型 三、使用测试数据集评估模型 四、总结 这是一个使用PyTorch实现的简单文本分类实战案例。在…

【Java】内部类Object类

目录 1.内部类 1.1实例内部类 1.2静态内部类 1.3局部内部类 1.4匿名内部类 2.Object类 2.1getClass方法 2.2equals方法 2.3hashcode方法 1.内部类 定义:一个类定义在另一个类或一个方法的内部,前者称为内部类,后者称为外部类。 分…

spring常用的事务传播行为

事务传播行为介绍 Spring中的7个事务传播行为: 事务行为 说明 PROPAGATION_REQUIRED 支持当前事务,假设当前没有事务。就新建一个事务 PROPAGATION_SUPPORTS 支持当前事务,假设当前没有事务,就以非事务方式运行 PROPAGATION_MANDATORY…

Java——线程池详细讲解

文章目录 一、线程池一、线程池基础1.1 什么是线程池1.2 为什么使用线程池1.3 线程池有哪些优势1.4 应用场景 二、线程池使用2.1 Java内置线程池 ThreadPoolExecutor2.1.1 线程池的七个参数2.1.1.1 **int corePoolSize 核心线程数量**2.1.1.2 int maximumPoolSize 最大线程数2.…

[OtterCTF 2018]之Misc篇(NSSCTF)刷题记录⑦

NSSCTF-Misc篇-[OtterCTF 2018] [OtterCTF 2018]General Info[OtterCTF 2018]Play Time[OtterCTF 2018]Silly Rick[OtterCTF 2018]What the password?[OtterCTF 2018]Name Game[OtterCTF 2018]Hide And Seek[OtterCTF 2018]Name Game 2[OtterCTF 2018]Path To Glory[OtterCTF …

2023年第二十届五一数学建模竞赛C题:“双碳”目标下低碳建筑研究-思路详解与代码答案

该题对于模型的考察难度较低,难度在于数据的搜集以及选取与处理。 这里推荐数据查询的网站:中国碳核算数据库(CEADs) https://www.ceads.net.cn/ 国家数据 国家数据​data.stats.gov.cn/easyquery.htm?cnC01 以及各省市《统…

安陆EGS20 SDRAM仿真

目录 一. 搭建仿真平台 二. 实现SDRAM连续写入1024个数据,然后再连续读出,并比较 1. 调试过程中问题: 2. 顶层代码 3. 功能代码 三. SDRAMFIFO实现上述功能调试 1. 代码设计要点 2. 仿真过程问题 3. 上板运行调试 安陆反馈&#xf…

YOLOv6 4.0 使用记录: OpenCV DNN C++推理

目录 1、下载源码 2、下载权重文件 3、配置环境 4、推理 6、ONNX格式导出 权重文件为yolov6list_s.pt 权重为yolov6.pt 7、opencv DNN推理 8、个人总结 1、下载源码 下载最新的4.0版本的 2、下载权重文件 我下的是YOLOv6Lite-S 3、配置环境 cd到项目目录,运…

3.6 cache存储器

学习步骤: 我会采取以下几个步骤来学习Cache存储器: 确定学习目标:Cache存储器作为一种高速缓存存储器,通常用于提高计算机系统的运行效率。因此,我需要明确学习Cache存储器的目的,包括了解其原理、结构和…

一图看懂 requests 模块:用Python编写、供人类使用的HTTP库, 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 requests 模块:用Python编写、供人类使用的HTTP库, 资料整理笔记(大全) 摘要模块图类关系图模块全展开【requests】统计常量str 模块3 w…

java数据结构之HashMap

目录 前言 1、初始化 1.1、初始化 1.2、插入第一条数据 2、数组 链表 2.1、插入数据:没有hash冲突 2.2、插入数据:Key不同,但产生hash冲突 2.3、插入数据:Key相同 3、数组 红黑树 3.1、链表如何转化为红黑树? 3.…

golang - switch

switch 的使用 switch 语句用于基于不同条件执行不同操作,,直每一个 case 分支都是唯一的,从上到下逐一测试到匹配为止匹配项后面也不需要再加 break switch 表达式 {case 表达式1, 表达式2, ... :语句块1case 表达式2, 表达式3, ... :语句块…

GPT:你知道这五年我怎么过的么?

时间轴 GPT 首先最初版的GPT,来源于论文Improving Language Understanding by Generative Pre-Training(翻译过来就是:使用通用的预训练来提升语言的理解能力)。GPT这个名字其实并没有在论文中提到过,后人将论文名最后…

【Unity3D小功能】Unity3D中实现轮船在水面上移动效果

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 标题是啥我写啥,大家好,今天给大家带来…

你的 Kubernetes 安全吗?最新benchmark的重要趋势解读

导语 疫情过后经济处在缓慢复苏的阶段,对于企业应该优先考虑数字化转型,因为它可以促进增长和创新。 不可避免地,当今的数字化转型计划依赖于云的可扩展性和灵活性。 虽然在云中启动应用程序和服务带来了许多机遇,但也带来了新的…

云原生Istio架构和组件介绍

目录 1 Istio 架构2 Istio组件介绍2.1 Pilot2.2 Mixer2.3 Citadel2.4 Galley2.5 Sidecar-injector2.6 Proxy(Envoy)2.7 Ingressgateway2.8 其他组件 1 Istio 架构 Istio的架构,分为控制平面和数据面平两部分。 - 数据平面:由一组智能代理([En…

HCIA-RS实验-路由配置-静态路由缺省路由(2)

接上文HCIA-RS实验-路由配置-静态路由&缺省路由 继续完成缺省路由;其他原截图就不再一一截图,有需要往回看一篇。 关闭上一篇的接口shutdown(重新启动) 上一篇在R2关闭的接口2 需要重新启动,输入 undo shutdown…

4月VR大数据:PICO平台应用近400款,领跑国内VR生态

Hello大家好,每月一期的VR内容/硬件大数据统计又和大家见面了。 想了解VR软硬件行情么?关注这里就对了。我们会统计Steam平台的用户及内容等数据,每月初准时为你推送,不要错过喔! 本数据报告包含:Steam VR硬…

我们公司的面试,有点不一样!

我们公司的面试,有点不一样! 朋友们周末愉快,我是鱼皮。因为我很屑,所以大家也可以叫我屑老板。 自从我发了自己创业的文章和视频后,收到了很多小伙伴们的祝福,真心非常感谢! 不得不说&#…