【夯实技术基本功】「底层技术原理体系」全方位带你认识和透彻领悟正则表达式(Regular Expression)的开发手册(正则符号深入解析 )

@[TOC](【夯实技术基本功】「底层技术原理体系」全方位带你认识和透彻领悟正则表达式(Regular Expression)的开发手册(正则符号深入解析 ))

借鉴官网的速查表

基础匹配符号

在这里插入图片描述

反向匹配表

在这里插入图片描述

各种操作符的运算优先级

承接上文,在正则表达式中,相同优先级的操作符按照从左到右的顺序进行运算,而不同优先级的操作符则按照先高后低的顺序进行运算。以下是各种操作符的优先级从高到低的顺序:

操作符描述
\转义符
( ), (?:), (?=), []圆括号和方括号
*, +, ?, {n}, {n,}, {n,m}限定符
^, $, \anymetacharacter位置和顺序
|"或"操作

高优先级:

圆括号:(),用于明确指定运算的顺序。

中优先级:

量词操作符:*、+、?、{n}、{n,}、{n,m},用于匹配指定次数的字符或子表达式。

低优先级:

  • 字符类操作符:[ ],用于定义字符集合。
  • 转义符:\,用于转义特殊字符。

请注意,具体的正则表达式操作符优先级可能根据不同的正则引擎或编程语言而有所不同。了解操作符的优先级可以帮助我们编写更准确和可读性更高的正则表达式,并确保表达式按照预期的方式进行匹配。

案例分析

下面是对每个正则表达式进行分析和解释的说明:

  1. /\b([a-z]+) \1\b/gi: 该正则表达式用于匹配连续出现的单词位置。具体解释如下:

    • \b: 匹配单词的边界。
    • ([a-z]+): 匹配一个或多个小写字母,并将其捕获为第一个分组。
    • \1: 引用第一个分组,即重复之前匹配的单词。
    • \b: 匹配单词的边界。
    • gi: 标志,表示全局匹配(匹配所有的连续出现的单词)和不区分大小写。
  2. /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/: 该正则表达式用于将一个URL解析为协议、域名、端口和相对路径。具体解释如下:

    • (\w+): 匹配一个或多个单词字符,并将其捕获为第一个分组,表示协议。
    • :\/\/: 匹配 "://" 字符。
    • ([^/:]+): 匹配除了 “:” 和 “/” 之外的任意字符,并将其捕获为第二个分组,表示域名。
    • (:\d*)?: 匹配可选的冒号和数字,并将其捕获为第三个分组,表示端口。
    • ([^# ]*): 匹配除了 “#” 和空格之外的任意字符,并将其捕获为第四个分组,表示相对路径。
  3. /^(?:Chapter|Section) [1-9][0-9]{0,1}$/: 该正则表达式用于定位章节的位置。具体解释如下:

    • ^: 匹配字符串的开始位置。
    • (?:Chapter|Section): 非捕获类型的分组,匹配 “Chapter” 或 “Section”。
    • :匹配一个空格。
    • [1-9][0-9]{0,1}:匹配一个以1-9开头的数字,后面跟0-9之间的一个数字(可选)。
    • $: 匹配字符串的结束位置。
  4. /[-a-z]/: 该正则表达式用于匹配26个小写字母及连字符 “-”。它表示任何一个小写字母或连字符。

  5. /ter\b/: 该正则表达式可匹配 “chapter” 字符串中的 “ter”,但不匹配 “terminal”,因为 \b 表示单词边界。

  6. /\Bapt/: 该正则表达式可匹配 “chapter” 字符串中的 “apt”,但不匹配 “aptitude”,因为 \B 表示非单词边界。

  7. /Windows(?=95 |98 |NT )/: 该正则表达式可匹配 “Windows95”、“Windows98” 或 “WindowsNT”,当找到匹配后,从"Windows"后面开始进行下一次的检索匹配。其中的 (?=95 |98 |NT ) 是一个正向预查,用于匹配 "95 "、"98 "、"NT ",但不包括这些字符在匹配结果中。

正则表达式匹配规则

基本模式匹配

在正则表达式中,模式是它们的基本元素,用来描述字符串的特征。模式可以非常简单,由普通的字符串组成,也可以非常复杂,包含特殊的字符来表示字符范围、重复出现或上下文。例如:

  • ^once: 这个模式中的特殊字符^表示该模式只匹配以"once"开头的字符串。例如,该模式可以匹配字符串"once upon a time",但无法匹配"There once was a man from NewYork"。与^表示开头类似,$符号用来匹配以给定模式结尾的字符串。

  • bucket$: 这个模式可以匹配"Who kept all of this cash in a bucket",但无法匹配"buckets"。当^$字符同时使用时,表示精确匹配,即字符串与模式完全匹配。例如,^bucket$只能匹配字符串"bucket"。如果一个模式不包含^$,则它可以匹配包含该模式的任何字符串。例如,模式"once"可以匹配如下字符串段落:

There once was a man from NewYork
Who kept all of his cash in a bucket.
  • 在模式中,字母(如o、n、c、e)及数字都被视为字面字符,即它们表示它们自己。对于其他一些稍微复杂的字符,如标点符号和空白字符(如空格、制表符等),需要使用转义序列。所有的转义序列都以反斜杠(\)开头。例如,制表符的转义序列是\t,所以如果我们想匹配以制表符开头的字符串,可以使用模式^\t

类似地,\n表示换行符,\r表示回车符。其他特殊符号可以通过在前面加上反斜杠进行转义,例如,反斜杠本身用\\表示,句点.\.表示,以此类推。

字符组

在现代互联网应用程序中,正则表达式常被用于验证用户的输入。当用户提交表单时,需要验证输入的电话号码、地址、电子邮件地址、信用卡号等是否有效。使用基于字面的字符匹配是不够的,因此需要一种更灵活的描述所需模式的方法,这就是字符组。

字符组是用于匹配一组指定字符的正则表达式元素。通过使用连字符(减号)来表示字符范围,字符组可以用于匹配特定范围内的字符。例如,对于需要表示所有元音字符的情况,可以将所有元音字符放在方括号内以构建一个字符组。

  • [AaEeIiOoUu] :这个字符组可以用于匹配任何一个元音字符。

通过将所需的字符放入字符组中,可以更灵活地匹配特定的字符模式。字符组允许指定多个字符作为候选项,并且只要输入的字符与字符组中的任意一个字符匹配即可。

  • [a-z]:这个字符组可以用于匹配所有的小写字母。
  • [A-Z]:这个字符组可以用于匹配所有的大写字母。
  • [a-zA-Z]:这个字符组可以用于匹配所有的字母。
  • [0-9]:这个字符组可以用于匹配所有的数字。
  • [0-9\.\-]:这个字符组可以用于匹配所有的数字、句号和减号。
  • [ \f\r\t\n]:这个字符组可以用于匹配所有的空白字符,包括空格、换页符、回车符、制表符和换行符。

通过将所需的字符放入字符组中,可以更灵活地匹配特定的字符范围。连字符用于表示字符的连续范围。字符组是一种强大的工具,可以使正则表达式更精确地匹配特定的字符模式。

字符组案例分析

字符组同样只能匹配单个字符,这一点至关重要。如果想要匹配由一个小写字母和一位数字组成的字符串,例如:“z2”、“t6"或"g7”,但不匹配"ab2"、“r2d3"或"b52”,可以使用以下模式:

^[a-z][0-9]$

尽管[a-z]表示26个字母的范围,但在这个模式中,它只能与第一个字符是小写字母的字符串进行匹配。

这个模式使用^匹配字符串的开头,接着是一个小写字母范围的字符,然后是一个数字范围的字符,最后使用$匹配字符串的结尾。这样,模式能够确保只匹配满足特定要求(一个小写字母后跟一个数字)的单个字符字符串。

字符组的控制分析

前面提到的 ^ 表示字符串的开头,但它还有另外一个含义。当在方括号内使用 ^,它表示“非”或“排除”的意思,常常用来排除某个字符。继续使用之前的例子,我们要求第一个字符不能是数字:

^[^0-9][0-9]$

在这个模式中,^[^0-9] 表示匹配的第一个字符不能是数字,[0-9]$ 表示第二个字符必须是数字,例如与"&5"、“g7"及”-2"是匹配的,但与"12"、"66"是不匹配的。

通过在方括号内使用 ^,我们可以构建一个字符组,明确指定要排除的字符范围,[^0-9] 表示除数字之外的任意字符。使用 ^ 匹配字符串的开头,接着是一个不能为数字的字符,然后是一个数字。由于使用了 ^$,模式需满足整个字符串的匹配。

几个排除特定字符的例子

下面是对描述的优化和润色的版本:

  • [^a-z]:除了小写字母之外的所有字符。
  • [^\\\/\^]:除了反斜杠(\)、正斜杠(/)和插入符号(^)之外的所有字符。
  • [^\"\']:除了双引号(")和单引号(')之外的所有字符。

在正则表达式中,特殊字符".“(点,句号)用来表示除了换行符(“新行”)之外的所有字符。因此,模式”^.5$“可以匹配任何由两个字符组成、以数字5结尾且以非换行符开头的字符串。模式”."可以匹配任何非空串,但不包括只有一个换行符组成的字符串。

重复出现次数

在之前的内容中,你已经了解到如何匹配单个字母或数字,但通常情况下,我们可能需要匹配单词或数字组。一个单词由多个字母组成,一组数字由多个单数字组成。花括号({})紧跟在字符或字符组后面,用于确定前面内容的重复出现次数。

花括号的分析介绍
  • {x} 表示前面的字符或字符组恰好出现 x 次。
  • {x,} 表示前面的内容出现 x 或更多的次数。
  • {x,y} 表示前面的内容至少出现 x 次,但不超过 y 次。

这种形式的花括号可以帮助我们更精确地控制重复内容的匹配次数,并满足特定的需求。

^[a-zA-Z0-9_]{1,}$ //所有包含一个或多个字母、数字或下划线的字符串
^[0-9]{1,}$ //所有的正数
^\-{0,1}[0-9]{1,}$ //所有的整数
^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$ //所有的小数
简单的解释
  • 第一个模式表示匹配包含一个或多个字母、数字或下划线的字符串。
  • 第二个模式表示匹配所有正数。
  • 第三个模式表示匹配所有整数,可带一个可选的负号前缀。
  • 最后一个模式表示匹配所有小数,可以有一个可选的负号前缀和小数点,小数点前后可以是任意数量的数字。
花括号的用法案例大全
字符组含义
^[a-zA-Z_]$所有字母和下划线
^a$字母 “a”
^a{4}$“aaaa”
^a{2,4}$“aa”、“aaa"或"aaaa”
^a{1,3}$“a”、“aa"或"aaa”
^a{2,}$包含两个以上 “a” 的字符串
^a{2,}“aardvark"和"aaab”,但不包括"apple"
a{2,}“baad"和"aaa”,但不包括 “Nantucket”
\t{2}两个制表符
.{2}任意两个字符
表达式的等价对比
^[a-zA-Z0-9_]+$ //所有包含一个或多个字母、数字或下划线的字符串
^[0-9]+$ //所有正数
^\-?[0-9]+$ //所有整数
^\-?[0-9]*\.?[0-9]*$ //所有小数
表达式简化处理
  • 特殊字符 “?” 与 {0,1} 是等价的,它们都表示 “0个或1个前面的内容” 或 “前面的内容是可选的”。
  • 特殊字符 “*” 与 {0,} 是等价的,它们表示 “0个或多个前面的内容”。
  • 特殊字符 “+” 与 {1,} 是等价的,表示 “1个或多个前面的内容”。因此,前面的4个例子可以简化为:

因此,之前的例子可以简化为:

^\-?[0-9]{0,}\.?[0-9]{0,}$

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

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

相关文章

K8s 入门指南(一):单节点集群环境搭建

前言 官方文档:Kubernetes 文档 | Kubernetes 系统配置 CentOS 7.9(2 核 2 G) 本文为 k8s 入门指南专栏,将会使用 kubeadm 搭建单节点 k8s 集群,详细讲解环境搭建部署的细节,专栏后面章节会以实战代码介绍…

leetcode 面试题 02.02. 返回倒数第k个节点

提建议就是,有些题还是有联系的,建议就收看完 876.链表的中间节点(http://t.csdnimg.cn/7axLa),再将这一题联系起来 面试题 02.02. 返回倒数第k个节点 题目: 实现一种算法,找出单向链表中倒数第…

geolife笔记:整理处理单条轨迹

以 数据集笔记 geolife (操作篇)_geolife数据集-CSDN博客 轨迹为例 1 读取数据 import pandas as pd data pd.read_csv(Geolife Trajectories 1.3/Data//000/Trajectory/20081023025304.plt,headerNone, skiprows6,names[Latitude, Longitude, Not_Im…

Volumetric Lights 2 HDRP

高清晰度渲染管道,包括先进的新功能,如半透明阴影图和直接灯光投射加上许多改进。 插件是一个快速,灵活和伟大的前瞻性光散射解决方案的高清晰度渲染管道。只需点击几下,即可改善场景中的照明视觉效果。 兼容: 点光源 聚光灯 碟形灯 矩形灯 通过覆盖摄像机周围大面积区域的…

oracle 下载java之前版本

登录oracle官网:Oracle | Cloud Applications and Cloud Platform 点击resource 进入该页面 点击这个 出现之前版本

学习pytorch19 pytorch使用GPU训练

pytorch使用GPU进行训练 1. 数据 模型 损失函数调用cuda()2. 使用谷歌免费GPU gogle colab 需要创建谷歌账号登录使用, 网络能访问谷歌3. 执行4. 代码 B站土堆学习视频: https://www.bilibili.com/video/BV1hE411t7RN/?p30&spm_id_frompageDriver&vd_sourc…

机器学习算法(7)-朴素贝叶斯算法和K最近邻算法

一、说明 在在这篇文章中,我将解释两种机器学习算法,称为贝叶斯定理和 K 最近邻算法。贝叶斯定理以 18 世纪英国数学家托马斯贝叶斯的名字命名,是确定条件概率的数学公式。k 最近邻算法,也称为 KNN 或 k-NN,是一种非参…

【Pyqt】QObject::connect: Cannot queue arguments of type ‘QTextCursor‘

问题说明 文本框接收到新的数据 不会自动滚动,并提示警告 QObject::connect: Cannot queue arguments of type ‘QTextCursor’ (Make sure ‘QTextCursor’ is registered using qRegisterMetaType().) 原因 线程回来的槽函数里面 调用了ui的代码 我们不能通过线程…

测试文档---智力冲刺

文章目录 项目背景测试计划UI测试接口测试手工测试 测试总结 项目背景 项目描述:“智力冲刺”是一款网页小游戏,就像我们平时看到的网页游戏一样,前端页面负责展示游戏效果,后端服务器来实现游戏的逻辑。在我们的“智力冲刺”游戏…

【从零认识ECS云服务器 | 快速上线个人网站】三、对外发布网站

3.1 配置域名 用户是如何访问网站的呢? 用户在浏览器(IE、Chrome、FireFox等)上输入域名,如:http://www.aliyun.com ; 浏览器自动调用DNS(域名服务)将域名解析为IP地址,如:123.123…

P3 Qt 控件 —— pushButton

前言 🎬 个人主页:ChenPi 🐻推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ 🔥 推荐专栏2: 《Linux C应用编程(概念类)_ChenPi的博客-CSDN博客》✨✨✨ 🌺本篇简介 :这一章我们学一…

CSGO游戏盲盒开箱源码 盲盒对战、幸运开箱、积分商城、Fl盲盒

源码介绍: CSGO游戏盲盒开箱源码 盲盒对战、幸运开箱、积分商城、Fl盲盒。这个是一个新花样玩法的盲盒程序。 仅供学习,请勿商用!请购买正版程序运营。 代码下载:百度网盘

一篇文章带你快速入门 Vue 核心语法

一篇文章带你快速入门 Vue 核心语法 一、为什么要学习Vue 1.前端必备技能 2.岗位多,绝大互联网公司都在使用Vue 3.提高开发效率 4.高薪必备技能(Vue2Vue3) 二、什么是Vue 概念:Vue (读音 /vjuː/,类似于 view) …

OpenVINS学习1——数据集配置与运行

前言 OpenVINS是基于MSCKF的开源VIO算法,有非常详细的官网文档可以学习使用,将来一段时间的主要实践工作,就是深度掌握这份开源代码。 https://docs.openvins.com/ 一、环境配置与Euroc数据集运行 我的环境是Ubuntu20.04,ROS1&a…

Python与ArcGIS系列(十六)重复节点检测

目录 0 简述1 实例需求2 arcpy开发脚本0 简述 在处理gis线图层和面图层数据时,有时候会遇到这种情况:数据存在重复节点或伪重复节点(两个节点距离极小),往往我们需要对这种数据进行检测标注或进行修改。本篇将介绍如何利用arcpy及arcgis的工具箱实现这个功能。 1 实例需求…

Axure原型图表组件库,数据可视化元件(Axure9大屏组件)

针对Axure制作的大屏图表元件库,帮助产品经理更高效地制作高保真图表原型,是产品经理必备元件工具。现分享完整的组件库,大家一起学习。 本组件库的图表模块,已包含所有常用的图表,以下为部分组件截图示意。文末可下载…

微信头像上传失败?照片尺寸修改方法大揭秘

微信上传头像失败是大家经常遇到的问题之一,其中的原因有可能是因为网络问题,也有可能是因为图片本身的问题,比如图片尺寸不符合平台要求,这时候,我们只需要通过给照片尺寸修改一下就可以解决,那么怎么修改…

LinuxBasicsForHackers笔记 -- 文件系统和存储设备管理

设备目录/dev Linux 有一个特殊的目录,其中包含代表每个连接设备的文件:相应命名的 /dev 目录。 /dev中有很多设备列表。 特别令人感兴趣的是设备 sda1、sda2、sda3、sdb 和 sdb1,它们通常是硬盘驱动器及其分区以及 USB 闪存驱动器及其分区…

Go实现http同步文件操作 - 增删改查

http同步文件操作 - 增删改查 http同步文件操作 - 增删改查1. 前置要求1.1. 构建结构体 文件名 文件内容1.1.1. 页面结构体1.1.2. 为Page结构体绑定方法:Save1.1.3. 对Page结构体支持页面内容查看方法,同时提供页面文件是否存在的方法 1.2. 简单验证上面…

如何快速完成企业私有云部署

快解析赋能企业私有云部署 ​ 很多企业形成了以总部为中心的多点生产体系结构,并借助网络化办公工具搭建跨区域协同办公系统,满足总部与分支机构间的信息互通,进而促进异地业务的信息共享,提高办公处理效率和综合管理水平。 北…