当前位置: 首页 > news >正文

26、正则表达式

目录

一. 匹配字符

.:匹配除换行符外的任意单个字符。

二. 位置锚点

^:匹配输入字符串的开始位置。

$:匹配输入字符串的结束位置。

\b:匹配单词边界。

\B:匹配非单词边界。

三. 重复限定符

*:匹配前面的字符或子表达式零次或多次(贪婪模式)。

+:匹配前面的字符或子表达式一次或多次(贪婪模式)。

?:匹配前面的字符或子表达式零次或一次(懒惰模式)。

{n}:匹配前面的字符或子表达式恰好n次。

{n,}:匹配前面的字符或子表达式至少n次。

{n,m}:匹配前面的字符或子表达式至少n次,但不超过m次。

四. 分支条件

|:逻辑“或”,匹配两个或多个选项中的一个。

五. 字符类

[abc]:匹配方括号内的任意一个字符。

[^abc]:匹配不在方括号内的任意一个字符。

\d:匹配任何数字字符。

\D:匹配任何非数字字符。

\s:匹配任何空白字符。

\S:匹配任何非空白字符。

\w:匹配任何字母数字字符及下划线。

\W:匹配任何非字母数字字符及非下划线。

六. 转义字符

\:转义字符,用于匹配元字符本身或特殊序列。

七. 特殊序列

\t:匹配制表符(Tab)。

\n:匹配换行符。

\r:匹配回车符。

\f:匹配换页符。

\v:匹配垂直制表符。

八. 分组和引用

():创建捕获组,用于分组和提取匹配的文本。

(?:...):创建非捕获组,用于分组但不捕获匹配的文本。

\数字:后向引用,引用之前捕获组匹配的文本。配合捕获组使用

九. 断言

(?=...):正向先行断言,匹配后面跟着特定模式的字符串。

(?!...):负向先行断言,匹配后面不跟着特定模式的字符串。

(?<=...):正向后行断言,匹配前面有特定模式的字符串。

(?

十. Unicode 和其他属性

十一. 递归

十二.重复模式


        正则表达式(Regular Expression,简称Regex)是一种用于字符串搜索和操作的强大工具,它使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。它是一套独立的规范,各类编程语言都会提供一些API,支持正则表达式。正则表达式由普通字符(例如,a-z、A-Z、0-9)和特殊字符(称为“元字符”)组成。以下是一些常用的元字符及其含义:

当然,以下是正则表达式元字符和特性的分类,每个都附有一个简单的案例和清晰的输出格式说明:

一. 匹配字符

.:匹配除换行符外的任意单个字符。

示例a.t 匹配 "act"、"a1t" 或 "a!t"。

二. 位置锚点

^:匹配输入字符串的开始位置。

示例^Hello 匹配以 "Hello" 开头的句子。

  • $:匹配输入字符串的结束位置。

示例World$ 匹配以 "World" 结尾的句子。

\b:匹配单词边界。

示例\bworld  这个正则表达式匹配的是 "world" 作为一个完整单词出现的情况

  • \B:匹配非单词边界。

示例\Bworld \B 匹配 "helloworld" 中的 "world"。

三. 重复限定符

*:匹配前面的字符或子表达式零次或多次(贪婪模式)。

示例a* 匹配 "a"、"aa" 或 "aaa"。

+:匹配前面的字符或子表达式一次或多次(贪婪模式)。

示例a+ 匹配 "a"、"aa" 或 "aaa",但不匹配空字符串。

?:匹配前面的字符或子表达式零次或一次(懒惰模式)。

示例a? 匹配 "a" 或空字符串。

{n}:匹配前面的字符或子表达式恰好n次。

示例a{3} 匹配 "aaa"。

{n,}:匹配前面的字符或子表达式至少n次。

示例a{3,} 匹配 "aaa"、"aaaa" 或 "aaaaa"。

{n,m}:匹配前面的字符或子表达式至少n次,但不超过m次。

示例a{2,3} 匹配 "aa" 或 "aaa"。

四. 分支条件

|:逻辑“或”,匹配两个或多个选项中的一个。

示例cat|dog 匹配 "I have a cat" 或 "I have a dog"。

五. 字符类

[abc]:匹配方括号内的任意一个字符。

示例[abc] 匹配 "a"、"b" 或 "c"。

[^abc]:匹配不在方括号内的任意一个字符。

示例[^abc] 匹配 "d"、"e" 或 "f"。

\d:匹配任何数字字符。

示例\d 匹配 "1"、"2" 或 "3"。

\D:匹配任何非数字字符。

示例\D 匹配 "a"、"b" 或 "c"。

\s:匹配任何空白字符。

示例\s 匹配空格、制表符或换行符。

\S:匹配任何非空白字符。

示例\S 匹配 英文字母。

  • \w:匹配任何字母数字字符及下划线。

示例\w 匹配 "a"、"1" 或 "_"。

  • \W:匹配任何非字母数字字符及非下划线。

示例\W 匹配空格或 "!"。

六. 转义字符

\:转义字符,用于匹配元字符本身或特殊序列。

示例\. 匹配实际的点字符。

七. 特殊序列

\t:匹配制表符(Tab)。

示例\t 匹配制表符。

\n:匹配换行符。

示例\n 匹配换行符。

\r:匹配回车符。

示例\r 匹配回车符。(回车符:将光标移回行首,不换行。换行符:将光标移至下一行开头,换行。)

Windows回车换行符都是enter键,单独敲出太麻烦,算了

\f:匹配换页符。

示例\f 匹配换页符。

通常用于打印机或文本处理软件中,以指示开始新的一页。在大多数文本编辑器或命令行界面中,换页符不是通过键盘直接输入的。没法演示。

\v:匹配垂直制表符。

示例\v 匹配垂直制表符。

垂直制表符通常不通过键盘直接输入,因为它主要用于老式的电传打字机和一些特殊的文本处理场景。

八. 分组和引用

():创建捕获组,用于分组和提取匹配的文本。

示例(abc) 匹配 "abc" 并捕获它。

(?:...):创建非捕获组,用于分组但不捕获匹配的文本。

示例(?:abc) 匹配 "abc" 但不捕获它。

说明:在正则表达式中使用它来对子表达式进行分组,但是不捕获匹配的结果。这意味着匹配到的内容不会像捕获组那样被存储起来,以便后续使用。

\数字:后向引用,引用之前捕获组匹配的文本。配合捕获组使用

示例(abc)\1 匹配 "abcabc"。匹配文本 abc 出现两次,并且中间没有任何其他符号。

九. 断言

(?=...):正向先行断言,匹配后面跟着特定模式的字符串。

示例abc(?=def) 匹配 "abc" 后面跟着 "def"。

(?!...):负向先行断言,匹配后面不跟着特定模式的字符串。

示例abc(?!def) 匹配 "abc" 后面不跟着 "def"。

  • (?<=...):正向后行断言,匹配前面有特定模式的字符串。

示例(?<=def)abc 匹配 "abc" 前面有 "def"。

(?<!...):负向后行断言,匹配前面没有特定模式的字符串。

示例(?<!def)abc 匹配 "abc" 前面没有 "def"。

十. Unicode 和其他属性

  • \p{...}:匹配具有特定 Unicode 属性的字符。

示例\p{L} 匹配任何字母

很多正则表达式引擎不支持 Unicode 属性转义或没有启用Unicode模式,暂时没测试。

十一. 递归

  • (?R):递归匹配,正则表达式可以引用自身。

示例(?R) 可以递归地匹配重复的模式。

正则表达式引擎不支持递归模式,暂时没测试。

十二.重复模式

  • 贪婪模式:对于重复限定符,默认情况下会匹配尽可能多的字符,这叫做贪婪模式。

  • 懒惰模式:在重复限定符之后加上 ?,表示匹配尽可能少的字符,这叫做懒惰模式。

相关文章:

26、正则表达式

目录 一. 匹配字符 .&#xff1a;匹配除换行符外的任意单个字符。 二. 位置锚点 ^&#xff1a;匹配输入字符串的开始位置。 $&#xff1a;匹配输入字符串的结束位置。 \b&#xff1a;匹配单词边界。 \B&#xff1a;匹配非单词边界。 三. 重复限定符 *&#xff1a;匹配…...

SpringBoot使用MockMVC通过http请求controller控制器调用测试

说明 在Spring Boot中编写测试控制器调用是一个常见的需求,通常使用Spring的测试框架来完成。Spring Boot提供了多种方式来测试控制器,包括使用MockMvc进行模拟HTTP请求和响应的测试。 基本示例 1. 创建Spring Boot项目 首先,确保你已经创建了一个Spring Boot项目。如果…...

【Unity3D】Unity混淆工具Obfuscator使用

目录 一、导入工具 二、各种混淆形式介绍 2.1 程序集混淆 2.2 命名空间混淆 2.3 类混淆 2.4 函数混淆 2.5 参数混淆 2.6 字段混淆 2.7 属性混淆 2.8 事件混淆 三、安全混淆 四、兼容性处理 4.1 动画方法兼容 4.2 GUI方法兼容 4.3 协程方法兼容 五、选项 5.1 调…...

C语言语法基础学习—动态分配空间(new和malloc的用法及区别)

前言 在 C 语言中&#xff0c;动态内存分配主要是通过 malloc() 和 free() 函数来完成的。而在 C 中是使用new和delete关键字&#xff0c;来动态分配内存。 虽然 C 语言没有 new&#xff0c;但 malloc() 和 new 在内存分配上的作用是相似的。下面我们详细解释 malloc() 和 ne…...

QT:控件属性及常用控件(3)-----输入类控件(正则表达式)

输入类控件既可以进行显示&#xff0c;也能让用户输入一些内容&#xff01; 文章目录 1.Line Edit1.1 用户输入个人信息1.2 基于正则表达式的文本限制1.3 验证两次输入的密码是否一致1.4 让输入的密码可以被查看 2.Text Edit2.1 输入和显示同步2.1 其他信号出发情况 3.ComboBox…...

Hive SQL 执行计划解析

Hive SQL 执行计划解析 一、 explain用法 1. SQL 查询 EXPLAIN SELECT SUM(view_dsp) AS view_sum FROM ads.table_a WHERE p_day 2025-01-06;2. 执行计划 STAGE DEPENDENCIES:Stage-1 is a root stageStage-0 depends on stages: Stage-1STAGE PLANS:Stage: Stage-1Map …...

热更新杂乱记

热更新主要有一个文件的MD5值的比对过程&#xff0c;期间遇到2个问题&#xff0c;解决起来花费了一点时间 1. png 和 plist 生成zip的时候再生成MD5值会发生变动。 这个问题解决起来有2种方案&#xff1a; &#xff08;1&#xff09;.第一个方案是将 png和plist的文件时间改…...

博客搭建 — GitHub Pages 部署

关于 GitHub Pages GitHub Pages 是一项静态站点托管服务&#xff0c;它直接从 GitHub 上的仓库获取 HTML、CSS 和 JavaScript 文件&#xff0c;通过构建过程运行文件&#xff0c;然后发布网站。 本文最终效果是搭建出一个域名为 https://<user>.github.io 的网站 创建…...

翻译:How do I reset my FPGA?

文章目录 背景翻译&#xff1a;How do I reset my FPGA?1、Understanding the flip-flop reset behavior2、Reset methodology3、Use appropriate resets to maximize utilization4、Many options5、About the author 背景 在写博客《复位信号的同步与释放&#xff08;同步复…...

Linux 进程环境变量:深入理解与实践指南

&#x1f31f; 快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。&#x1f31f; &#x1f6a9;用通俗易懂且不失专业性的文字&#xff0c;讲解计算机领域那些看似枯燥的知识点&#x1f6a9; 在 Linux 系统里…...

Linux探秘坊-------5.git

1.git介绍 1.版本控制器 为了能够更⽅便我们管理这些不同版本的⽂件&#xff0c;便有了版本控制器。所谓的版本控制器&#xff0c;就是能让你了解到⼀个⽂件的历史&#xff0c;以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统&am…...

Linux中的几个基本指令(二)

文章目录 1、cp指令例一&#xff1a;例二&#xff1a;例三&#xff1a;例四&#xff1a;例五&#xff1a; 2、mv 指令例一&#xff1a;例二&#xff1a; 3、cat指令例一&#xff1a; 4、tac指令5、which指令6、date指令时间戳&#xff1a;7、zip指令 今天我们继续学习Linux下的…...

Java入门笔记(1)

引言 在计算机编程的广袤宇宙中&#xff0c;Java无疑是一颗格外耀眼的恒星。那么&#xff0c;Java究竟是什么呢&#xff1f; Java是美国Sun公司&#xff08;Stanford University Network&#xff09;在1995年推出的一门计算机高级编程语言。曾经辉煌的Sun公司在2009年被Oracle&…...

设计模式的艺术-开闭原则

原则使用频率图&#xff08;仅供参考&#xff09; 1.如何理解开闭原则 简单来说&#xff0c;开闭原则指的是 “对扩展开放&#xff0c;对修改关闭”。 当软件系统需要增加新的功能时&#xff0c;应该通过扩展现有代码的方式来实现&#xff0c;而不是去修改已有的代码。 例如我…...

【C语言系列】深入理解指针(3)

深入理解指针&#xff08;3&#xff09; 一、字符指针变量二、数组指针变量2.1数组指针变量是什么&#xff1f;2.2数组指针变量怎么初始化&#xff1f; 三、二维数组传参的本质四、函数指针变量4.1函数指针变量的创建4.2函数指针变量的使用4.3两段有趣的代码4.4 typedef关键字 …...

three.js+WebGL踩坑经验合集:写在前面的话

笔者从2023年初开始参与一个基于three.js引擎的web项目的开发工作。本打算2024年春节就把期间踩过的坑写到博客上分享给大家&#xff0c;然而哪怕本专栏的各种构思和内容已经在笔者的脑海里翻滚了一年&#xff0c;得了严重拖延症患者的我还是一直拖到了现在&#xff0c;实在惭愧…...

利用Linux的工作队列(Workqueue)实现中断下半部的处理

本文代码在哪个基础上修改而成&#xff1f; 本文是在博文 https://blog.csdn.net/wenhao_ir/article/details/145228617 的代码基础上修改而成。 关于工作队列(Workqueue)的概念 工作队列(Workqueue)可以用于实现Linux的中断下半部的&#xff0c;之前在博文 https://blog.cs…...

LabVIEW处理复杂系统和数据处理

LabVIEW 是一个图形化编程平台&#xff0c;广泛应用于自动化控制、数据采集、信号处理、仪器控制等复杂系统的开发。它的图形化界面使得开发人员能够直观地设计系统和算法&#xff0c;尤其适合处理需要实时数据分析、高精度控制和复杂硬件集成的应用场景。LabVIEW 提供丰富的库…...

spring-springboot -springcloud

目录 spring: 动态代理: spring的生命周期(bean的生命周期): SpringMvc的生命周期: SpringBoot: 自动装配: 自动装配流程: Spring中常用的注解&#xff1a; Spring Boot中常用的注解&#xff1a; SpringCloud: 1. 注册中心: 2. gateway(网关): 3. Ribbon(负载均…...

DRG/DIP 2.0时代下基于PostgreSQL的成本管理实践与探索(下)

五、数据处理与 ETL 流程编程实现 5.1 数据抽取与转换(ETL) 在 DRG/DIP 2.0 时代的医院成本管理中,数据抽取与转换(ETL)是将医院各个业务系统中的原始数据转化为可供成本管理分析使用的关键环节。这一过程涉及从医院 HIS 系统中抽取患者诊疗数据,并对其进行格式转换、字…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...