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

前言

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

一、正则表达式是什么

正则表达式(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"的日期。

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

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

相关文章

微信小程序基础工作模板

1.轮播图 点击跳转官方文档 简单例子 <!-- 顶部轮播图 --> <swiper indicator-dots"true" class"banner" autoplay"true" interval"2000"><swiper-item><image src"../../images/轮播图1.jpg" >…

LeetCode 239.滑动窗口最大值【困难】

思路 构建一个单调递增的队列类型&#xff0c;pop和push操作在队列内部进行特殊定义&#xff08;队头存储当前滑动窗口的最大值&#xff1b;队列中比插入元素小的队尾元素均要移除&#xff1b;比队尾元素小的元素直接插入队列&#xff1b;当滑动窗口移除的元素和队头元素相等时…

解决:git SSL certificate problem: unable to get local issuer certificate

解决&#xff1a;git SSL certificate problem: unable to get local issuer certificate 错误&#xff1a; git SSL certificate problem: unable to get local issuer certificate 这个问题是由于没有配置信任的服务器HTTPS验证。默认&#xff0c;cURL被设为不信任任何CAs&a…

【JMeter接口测试工具】第二节.JMeter基本功能介绍(下)【入门篇】

文章目录 前言八、Jmeter常用逻辑控制器 8.1 如果&#xff08;if&#xff09;控制器 8.2 循环控制器 8.3 ForEach控制器九、Jmeter关联 9.1 正则表达式提取器 9.2 xpath提取器 9.3 JSON提取器十、跨越线程组传值 10.1 高并发 10.2 高频…

vue3第三十七节(自定义插件之自定义指令)防重指令

引言&#xff1a;自定义指令&#xff0c;我们可以通过插件的形式进行全局注册&#xff1a; 例如&#xff1a;在提交按钮请求接口时候&#xff0c;为了防止重复提交&#xff0c;而导致的请求资源浪费&#xff0c;或者是新增提交时候&#xff0c;防止新增相同的数据。 我们的全局…

力扣930.和相同的二元子数组

力扣930.和相同的二元子数组 哈希表法 最终[l,r]区间和为goal sum为记录的非递减前缀和 sum[r] - sum[l] goal因此遍历右端点时 找到左端点为sum[l]的出现次数即可 class Solution {public:int numSubarraysWithSum(vector<int>& nums, int goal) {int n nums…

关于修改Python中pip默认安装路径的终极方法

别想了&#xff0c;终极方法就是手动复制&#xff0c;不过我可以给你参考一下手动复制的方法 关于手动移动pip安装包的方法 别想了&#xff0c;终极方法就是手动复制&#xff0c;不过我可以给你参考一下手动复制的方法一、首先确认一下pip默认安装路径二、再确认一下需要移动到…

Python中包(package)与模块(module)的概念 以及 import 问题

目录 Python中 包(package) 与 模块(module) 的概念一. Python中, 包 (package) 与 模块 (module) 的概念1. 一个有 __init__.py 文件 的目录, 被视为一个 Python 的 包 (package)2. 一个Python源文件 , 被视为一个模块 (module) 二. 不同包之间 以及 同一个包的不同模块之间的…

信号:干扰类别及特征提取(二)

目录 第二部分&#xff1a;特征提取 一&#xff1a;瞬时特征参数 1.零中心归一化瞬时幅度之谱密度的最大值 2.非弱信号段零中心归一化瞬时幅度的标准偏差 3.零中心归一化瞬时幅度绝对值的标准偏差 4.零中心归一化非弱信号段瞬时频率的标准偏差 5.零中心归一化非弱信号段…

Codeforces Round 951 (Div. 2)

A - Guess the Maximum 直接暴力枚举 a i , a i 1 a_i,a_{i1} ai​,ai1​找最小的最大值 答案即为最小的最大值-1 code: #include<bits/stdc.h> #define endl \n #define fast() ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr) #define F first #…

1118 如需挪车请致电(测试点4)

solution 测试点4&#xff1a;直接给出数字&#xff0c;即零个运算符的情况 #include<iostream> #include<string> #include<map> #include<cmath> using namespace std; int main(){string s, ans "";map<string, int> mp {{&quo…

用HAL库改写江科大的stm32入门-输入捕获原理图示

原理与接线&#xff1a; &#xff08;输入捕获的结构&#xff09; cubeMx: PA11&#xff1a;

OpenCV学习(4.7) Canndy边缘检测

1.目标 在本章中&#xff0c;我们将了解 Canny 边缘检测的概念OpenCV 的功能&#xff1a; cv.Canny&#xff08;&#xff09; Canny边缘检测是一种经典的边缘检测算法&#xff0c;由John F. Canny在1986年提出。Canny算法的目标是找到图像中真正的边缘&#xff0c;同时尽可能…

深度数据探索:超高效信息提取解决方案

在当今信息爆炸的时代&#xff0c;数据已成为驱动企业决策、科学研究和社会进步的关键要素。然而&#xff0c;如何从海量的数据中快速、准确地提取有价值的信息&#xff0c;成为了摆在我们面前的一大挑战。为此&#xff0c;深度数据探索技术应运而生&#xff0c;为我们提供了一…

生成式人工智能 - Stable Diffusion 都使用了哪些技术?

一、Stable Diffusion简述 1、简述 Stable Diffusion在2022年8月开源,是由慕尼黑大学的CompVis研究团队开发的生成式人工神经网络。该项目由初创公司StabilityAI、CompVis和Runway合作开发,并得到了EleutherAI和LAION的支持。截至2022年10月,StabilityAI已筹集了1.01亿美元…

【旅行】关于毕业旅行与长期旅行计划(城市、攻略、预算、交通、面基等)

【旅行】关于毕业旅行与长期旅行计划&#xff08;城市、攻略、预算、交通、面基等&#xff09; 文章目录 一、目的地与去哪儿玩1、可能2、人民币3、国家地理4、省份与城市5、环球旅行 二、攻略之怎么玩&#xff08;旅行预算、攻略&#xff09;1、旅行预算之交通、住宿、门票等2…

2024.6.4小结

迭代器的一致性是什么 迭代器的一致性指的是在迭代集合&#xff08;如列表、映射等&#xff09;的过程中&#xff0c;迭代器能够反映出最新的集合状态&#xff0c;并且不会发生意外的行为或异常。 在多线程环境中&#xff0c;由于集合可能在迭代期间被其他线程修改&#xff0…

【Autopilot】没有自动添加本地管理员的问题处理

【问题】某公司选用了D记的笔记本电脑&#xff0c;约定出厂就预配置好Autopilot&#xff0c;当时向D记提供了三个信息&#xff1a; 1. M365的租户ID 2. 公司域名信息 3. Group Tag (某公司为跨国公司&#xff0c;通过Group Tag来区分国家&#xff0c;比如CHN-中国&#xff0c;L…

【python】OpenCV GUI——Mouse(14.1)

参考学习来自 文章目录 背景知识cv2.setMouseCallback 介绍小试牛刀 背景知识 GUI&#xff08;Graphical User Interface&#xff0c;图形用户界面&#xff09; 是一种允许用户通过图形元素&#xff08;如窗口、图标、菜单和按钮&#xff09;与电子设备进行交互的界面。与传统…

四种跨域解决方案

文章目录 1.引出跨域1.基本介绍2.具体演示1.启动之前学习过的springboot-furn项目2.浏览器直接访问 [localhost:8081/furns](http://localhost:8081/furns) 可以显示信息3.启动前端项目&#xff0c;取消请求拦截器&#xff0c;这样设置&#xff0c;就会出现跨域4.跨域原因 2.跨…