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

正则表达式的详解带你认识正则表达式的意义

前言

​ 我们都知道协议通常通过添加固定的字符、报头、特定的数字等来定义数据的结构和格式。将正确的信息提取出来是十分重要的,而正则表达式可以用来描述和匹配这些固定的结构,从而提取出所需的信息。并且正则表达式还可以处理大量复杂的字符串。这篇文章将会带你彻底了解正则表达式。

一、正则表达式是什么

正则表达式(Regular Expressions,简称regexregexp)是一种模式匹配的工具,用于在文本处理中查找、替换和验证字符串。正则表达式可以用于各种编程语言和工具中,以实现复杂的文本处理任务。以下是对正则表达式的详细解释。

正则表达式的定义

正则表达式是一种描述字符模式的特殊语法,广泛应用于文本搜索、替换和字符串验证。它可以匹配特定的字符序列,从而识别和处理文本中的特定模式。

主要用途

  1. 文本搜索:在大文本中查找特定的子字符串。
  2. 文本替换:将匹配的子字符串替换为其他字符串。
  3. 字符串验证:验证输入是否符合特定格式(如邮箱地址、电话号码、邮政编码等)。
  4. 数据提取:从文本中提取符合特定模式的数据。

二、正则表达式的构成

正则表达式由以下三类字符组成:

普通字符

  • 字母(如 a-z, A-Z
  • 数字(如 0-9
  • 特殊符号(如 @, #, & 等)

元字符(Metacharacters)

具有特殊含义的字符,用于定义复杂的模式匹配规则。常见的元字符包括:

  • .:匹配除换行符外的任意单个字符
  • ^:匹配字符串的开头,或者在方括号内部用来表示取反
  • $:匹配字符串的结尾
  • *:匹配前面的子表达式零次或多次
  • +:匹配前面的子表达式一次或多次
  • ?:匹配前面的子表达式零次或一次,或在某些上下文中表示非贪婪匹配
  • [] :匹配方括号内的任意一个字符。例如[abc]匹配"a"、“b"或"c”。
  • |:表示逻辑“或”操作
  • ():定义子表达式,用于分组和捕获
  • {}:匹配前面的子表达式指定次数
  • {n} :匹配前面的子表达式恰好n次。
  • {n,} :匹配前面的子表达式至少n次。
  • {n,m} :匹配前面的子表达式至少n次,至多m次。

非贪婪匹配:在量词后面使用时,改变默认的贪婪匹配行为,使匹配尽可能少的字符

量词 ?

在正则表达式中,? 作为量词时表示前面的子表达式匹配零次或一次。例如:

ab?c

这个正则表达式可以匹配 “ac” 或 “abc”,但不能匹配 “abbc”。

非贪婪匹配(懒惰匹配)

正则表达式中的量词(如 *, +, ?, {n,m})默认是贪婪的,意味着它们会尽可能多地匹配字符。例如:

a.*b

在字符串 “aabab” 上匹配时,.* 会尽可能多地匹配,所以它会匹配整个字符串 “aabab”。

如果在量词后面加上 ?,则会使量词变成非贪婪的,意味着它们会尽可能少地匹配字符。例如:

a.*?b

在字符串 “aabab” 上匹配时,.*? 会尽可能少地匹配,所以它会匹配 “aab”(第一个 “a” 后到第一个 “b” 之间的最少字符)。

转义字符(Escape Characters)

用反斜杠 \ 引导,用于匹配那些具有特殊含义的字符或者用于表示特定的字符类型。常见的转义字符包括:

  • \d:匹配任意一个数字字符(0-9)
  • \D:匹配任意一个非数字字符
  • \w:匹配任意一个单词字符(字母、数字或下划线)
  • \W:匹配任意一个非单词字符
  • \s:匹配任意一个空白字符(空格、制表符等)
  • \S:匹配任意一个非空白字符
  • \b:匹配一个单词边界
  • \B:匹配非单词边界
  • \n:匹配换行符
  • \r:匹配回车符
  • \t:匹配制表符
  • \\:匹配反斜杠本身
  • \.:匹配点字符本身

示例

  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,}匹配两个以上的a-zA-Z $:为结尾

  2. 匹配电话号码

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

    该正则表达式匹配格式为"123-456-7890"的电话号码。

  3. 匹配日期(格式为YYYY-MM-DD)

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

    该正则表达式匹配格式为"2024-06-06"的日期。

相关文章:

正则表达式的详解带你认识正则表达式的意义

前言 ​ 我们都知道协议通常通过添加固定的字符、报头、特定的数字等来定义数据的结构和格式。将正确的信息提取出来是十分重要的,而正则表达式可以用来描述和匹配这些固定的结构,从而提取出所需的信息。并且正则表达式还可以处理大量复杂的字符串。这篇…...

中国现在最厉害的书法家颜廷利:东方伟大思想家哲学家教育家

中国书法界名人颜廷利教授,一位在21世纪东方哲学、科学界及当代中国教育领域内具有深远影响力的泰斗级人物,不仅以其深厚的国学修为和对易经姓名学的独到见解著称,还因其选择在济南市历城区的龙泉大街以及天桥区的凤凰山庄与泉星小区等地设立…...

OS常用操作

目录 1 文件和目录操作 1. 1 创建目录 1.2 删除目录 1.3 列出目录内容 1.4 删除文件 1.5 打开和关闭文件描述符 1.6 修改文件权限 1.7 获取和设置文件属性 2 路径操作 2.1 获取当前工作目录 2.2 改变工作目录 2.3 路径操作 2.4 添加 Python 的模块搜索路径列表 3 …...

【IC验证】03 UVM

...

Jira的原理及应用详解(六)

本系列文章简介: 在当今快速发展的软件开发和项目管理领域,有效的团队协作和精确的项目进度追踪是确保项目成功的关键。Jira作为一款广受欢迎的项目和问题追踪工具,以其强大的功能、灵活的定制性以及卓越的用户体验,赢得了全球众多…...

Linux进程间通信之System V

目录 认识system V: system V共享内存: 共享内存的基本原理: 共享内存的数据结构: 共享内存的建立与释放: 共享内存的建立: 共享内存的释放: 共享内存的关联: 共享内存的去关联…...

力扣hot100:394. 字符串解码(递归/括号匹配,字符串之间相对顺序)

LeetCode:394. 字符串解码 本题容易想到用递归处理,在写递归时主要是需要明确自己的递归函数的定义。 不过我们也可以利用括号匹配的方式使用栈进行处理。 1、递归 定义递归函数string GetString(string & s,int & i); 表示处理处理整个numbe…...

【C++11】多线程常用知识

知识体系 thread C++ thread中最常用的两个函数是join和detach,怎么选择呢,简单来说,如果希望等待线程结束,用join,如果希望异步执行,且不等待执行结果,那么就用detach;thread_local可以简单理解为一个线程级别的全局变量;线程id在调试多线程程序时是非常有用的东西;…...

详解linux设备下的/dev/null

/dev/zero是一个特殊的设备文件,它在Linux系统中通常被用来生成无限数量的零数据流。 这个设备文件位于/dev目录下,它不代表任何实际的硬件设备,而是一个虚拟设备。 当从/dev/zero设备中读取数据时,会得到无限数量的零字节&…...

GPT-4 Turbo 和 GPT-4 的区别

引言 人工智能(AI)领域的发展日新月异,OpenAI 的 GPT 系列模型一直是这一领域的佼佼者。GPT-4 和 GPT-4 Turbo 是目前市场上最先进的语言模型之一。本文将详细探讨 GPT-4 和 GPT-4 Turbo 之间的区别,以帮助用户更好地理解和选择适…...

基于小波多分辨分析的一维时间序列信号趋势检测与去除(MATLAB R2018a)

小波最开始是数学上提出的概念,并且在纯数学的王国里存在了一个世纪之久。最开始是为了弥补傅里叶分析的缺陷,即傅里叶级数发散的问题,并寻找出能够代替傅里叶分析的方法。从最早的一些艰难的探索开始直到慢慢发展成为一套完整系统的小波分析…...

Linux RedHat7.6操作系统的xfs格式化后,mount不生效

Linux RedHat7.6操作系统的xfs格式化后,mount不生效 问题现象 最近在准备测试环境的过程中,当对xfs文件系统格式化后,mount磁盘,通过df -h命令查看,未显示挂载磁盘信息 [rootZHZXLxjspo0db003 ~]# mount /dev/datavg/datavg-lv_data /data…...

高并发ping多台主机IP

简介 社区或者是大型公司往往有成千上万或者几百台设备,保持设备始终在线对网络运维人员来说至关重要,然而一个一个登录检查,或者一个一个ping并不明智,累人且效率极低,并出错率高。花钱买检测服务当我没说。 shell编…...

03 Linux 内核数据结构

Linux kernel 有四种重要的数据结构:链表、队列、映射、二叉树。普通驱动开发者只需要掌握链表和队列即可。 链表和队列 Linux 内核都有完整的实现,我们不需要深究其实现原理,只需要会使用 API 接口即可。 1、链表 链表是 Linux 内核中最简单、最普通的数据结构。链表是一…...

关于软件调用独显配置指引【笔记】

关于笔记本电脑不支持独显直连的,bios下也是没有切换独显直连的选项的,处理方法 简单的来说按照图片指引可配置让软件调用独显: 1、进入系统→屏幕→显示卡界面; 2、【添加应用】浏览需要调用独显的软件安装目录,并打开…...

正大国际期货:什么是主力合约?

一个期货品种,在同一时间段,会上市多个月份的合约, 由于主力合约交易量大,流动性高,一般建议新手交易主力合约。 主力合约通常指交易集中,流动性好的合约 ,即在一段时间内交易量和持仓量最大的…...

codeforces round 949 div2

A Turtle and Piggy Are Playing a Game 题目&#xff1a; 思路&#xff1a;输出2的幂次b使得2^b为最大的不超过x的数 代码&#xff1a; #include <iostream>using namespace std;const int N 2e5 10;void solve() {int l, r;cin >> l >> r;if(r % 2) …...

分享美好,高清无阻 - 直播极简联网解决方案

1、需求背景 随着移动互联网、UGC模式和直播平台的发展&#xff0c;网络直播的门槛日益降低&#xff0c;越来越多的人希望成为直播的主角。基于物联网的户外直播无线联网解决方案应运而生&#xff0c;满足直播者的需求。 户外直播无线联网解决方案提供了无处不在的直播体验&a…...

贪心算法-加油站

一、题目描述 二、解题思路 1.运动过程分析 这里需要一个油箱剩余油量的变量resGas&#xff0c;初始化resGas0&#xff1b;还需要一个标记从什么位置当做初始位置的startIdx&#xff0c;初始化startIdx0。 我们从数组下标idx0处开始向后遍历&#xff0c;初始时startIdx0&#…...

【ArcGIS微课1000例】0116:将度-分-秒值转换为十进制度值(字段计算器VBA)

相关阅读:【ArcGIS微课1000例】0087:经纬度格式转换(度分秒转度、度转度分秒) 文章目录 一、计算方法二、计算案例一、计算方法 将度分秒转换为十进制度的简单等式: DD = (Seconds/3600) + (Minutes/60) + Degrees如果角度值是负数,则转换方法不同。其中一种方法是: …...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

React---day11

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

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统&#xff1a;AI驱动的职业规划平台技术解析 引言&#xff1a;数字时代的职业革命 在当今瞬息万变的就业市场中&#xff0c;传统的职业规划方法已无法满足个人和企业的需求。据统计&#xff0c;全球每年有超过2亿人面临职业转型困境&#xff0c;而企业也因此遭…...

C/Python/Go示例 | Socket Programing与RPC

Socket Programming介绍 Computer networking这个领域围绕着两台电脑或者同一台电脑内的不同进程之间的数据传输和信息交流&#xff0c;会涉及到许多有意思的话题&#xff0c;诸如怎么确保对方能收到信息&#xff0c;怎么应对数据丢失、被污染或者顺序混乱&#xff0c;怎么提高…...