正则表达式概念以及语法的使用

目录

1.概念

2. 为什么使用正则表达式?

3. 语法

1.普通字符

非打印字符

2. 特殊字符

3. 限定符

4. 定位符

5. 运算优先级

3.匹配规则

1. 基本模式匹配

2. 字符簇

3. 确定重复出现


1.概念

正则表达式(Regular Expression)是一种文本模式包括普通字符(例如,a 到 z 之间的字母)
和特殊字符(称为"元字符"),正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。

2. 为什么使用正则表达式?

典型的搜索和替换操作要求您提供与预期的搜索结果匹配确切文本,虽然这种技术对于对
静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索
动态文本,即使不是不可能,至少也会变得很困难。

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一
个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等

正则表达式可以灵活的匹配到 通用字符,它一般用在测试密码框,账号框等输入框中的字符是否匹配。

3. 语法

正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字
模式

1.普通字符

普通字符包括大写和小写字母所有数字、所有标点符号以及非打印字符和一些其他符号。

非打印字符

 

2. 特殊字符

特殊字符就是一些有特殊含义的字符,如下

 

3. 限定符

+ 号代表前面的字符必须至少出现一次(1 次或多次)

sjp+,可以匹配 sjp、sjpp、sjppp等,

* 号代表前面的字符可以不出现,也可以出现一次或者多次

sjp*,可以匹配sj、sjp、sjpp 等,(0 次、或 1 次、或多次) 

? 问号代表前面的字符最多只可以出现一次(0 次、或 1 次)  

sjp? 只能 匹配 sj 或者 sjp 

{n}, n 是一个非负整数。匹配确定的 n 次

例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o

{n,},n 是一个非负整数。至少匹配 n 次

 o{2,}' 不能匹配 "Bob" 中的 'o'但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于'o+'。'o{0,}' 则等价于 'o*'。

{n,m},m 和 n 均为非负整数,其中 n <= m。最少匹配 n 次且最多匹配 m 次 

最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配"fooooood" 中的前三个 o

 

4. 定位符

注意:不能将限定符与定位符一起使用。由于在紧靠换行或者单词边界的前面或后面不能有
一个以上位置,因此不允许诸如 ^* 之类的表达式 

5. 运算优先级

正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。
相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表从最高到最低说明了各
种正则表达式运算符的优先级顺序:

 

3.匹配规则

1. 基本模式匹配

模式,是正则表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。

  • ^ 符号用来匹配那些以给定模式开头的字符串
^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.  匹配

2. 字符簇

正则表达式通常用来验证用户的输入。当用户提交一个 表单以后,要判断输入的电话号码、地址、EMAIL 地址、信用卡号码等是否有效,用普通的基于字面的字符是不够的。 所以就需要用字符簇来表示。

要建立一个表示所有元音字符的字符簇,就把所有的元音字符放在一个方括号里

[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]$

这个模式与"&5"、"g7"及"-2"是匹配的,但与 "12"、"66" 是不匹配的。下面是几个排除特定字
符的例子:

[^a-z] //除了小写字母以外的所有字符

3. 确定重复出现

如果一个单词有若干个字母组成,一组数字有若干个单数组成。跟在字符或字符簇后面的花括号({})用来确定前面的内容的重复出现的次数

如下:

^a{4}$  // aaaa
^a{2,4}$  //aa aaa aaaa
^a{2,}$  // aa ,aaa aaa等多个a
^a{2,}  //aardvark 和 aaab可以, apple不行
a{2,}  //baad aaaa可以,但Nantucket不行 
.{2}   //匹配所有的两个字符
\t{2}  //两个字表符

更多的单词和数字的匹配:

^[a-zA-Z0-9_]{1,}$ // 所有包含一个以上的字母、数字或下划线的字符串
^[1-9][0-9]{0,}$ // 所有的正整数
  • [1-9] 表示 可以从中 1-9选中一个字符
  • [0-9]{0,} 表示可以从0~9中选择任意个字符。
^\-{0,1}[0-9]{1,}$ //所有整数

\-{0,1}:表示可以匹配0个或者1个 " -" 符号

[0-9]{1,}:表示可以匹配1个以上的 0-9数字

^\-?[0-9]{1,}\.?[0-9]{1,}$ //所有的浮点数

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

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

相关文章

如何使用自动化构造随机路由模型

为什么要仿真随机路由&#xff1f; 路由器测试中&#xff0c;为了最大程度还原现网路由情况&#xff0c;评估路由器在现网环境下稳定工作各项指标&#xff0c;需要对导入路由进行离散仿真&#xff0c;目前路由仿真可分为导入路由与生成路由两种方式&#xff0c;导入路由需要现…

think-on-graph: 基于知识图谱的大模型推理

概述 本文的研究背景是大规模语言模型在复杂推理任务中存在困难并展示了较低的性能&#xff0c;特别是在需要知识的追溯能力、及时性和准确性的场景中。 过去的方法主要面临两个问题&#xff1a;推理不负责任容易生成虚构或带有有害文本&#xff0c;以及模型在预训练阶段无法…

基于IPC-CFX的点对点通信C#

IPC-CFX有两种主要的通信方式&#xff0c;可以通过RabbitMQ发布和订阅&#xff0c;也可以通过request和response进行点对点的通信&#xff0c;本文主要讲的是点对点的通信方式。 在vscode里建立新的dotnet项目&#xff0c;可以通过终端输入dotnet new console来建立&#xff0c…

LCD—STM32液晶显示(2.使用FSMC模拟8080时序)

目录 使用STM32的FSMC模拟8080接口时序 FSMC简介 FSMC NOR/PSRAM中的模式B时序图 用FSMC模拟8080时序 重点&#xff1a;HADDR内部地址与FSMC地址信号线的转换&#xff08;实现地址对齐&#xff09; 使用STM32的FSMC模拟8080接口时序 ILI9341的8080通讯接口时序可以由STM32使…

北邮国院物联网 Microprocessor 微处理器笔记

Introduction-随便聊 嵌入式系统是什么&#xff1f;专用的计算机系统。为专门功能可能对计算机架构&#xff0c;外设等做出一些取舍。 通常的限制&#xff1a;Cost&#xff08;比如大量部署传感器节点&#xff09;&#xff0c;Size and weight limits&#xff08;特定应用场景…

配置Hadoop_0

配置Hadoop_0 1配置Hadoop100模板虚拟机1.1配置Hadoop100模板虚拟机硬件1.2配置Hadoop100模板虚拟机软件1.3配置Hadoop100模板虚拟机IP地址1.4配置Hadoop100模板虚拟机主机名称/主机名称映射1.5配置Hadoop100模板虚拟机远程操作工具 1配置Hadoop100模板虚拟机 Hadoop100 内存…

TRT4-trt-integrate - 1 YOLOV5导出、编译、推理

模型导出 修改Image的Input动态维度 首先可以看到这个模型导出的时候Input有三个维度都是动态&#xff0c;而我们之前说过只需要一个batch维度是动态&#xff0c;所以要在export的export onnx 进行修改&#xff0c;将 torch.onnx.export(model, im, f, verboseFalse, opset_ver…

华为云子网路由表作用及价值

子网路由表 子网路由表作用云专线、VPN的配置与子网路由表强关联&#xff0c;本质是在相应的子网路由表中添加了一条路由Nat路由表问题地址变更问题snat和dnat 子网路由表作用 子网内部作为一个二层网络&#xff0c;通过mac地址互通&#xff0c;不通过路由互通。跨子网&#x…

实时网络更改检测

未经授权的配置更改可能会对业务连续性造成严重破坏&#xff0c;这就是为什么使用实时更改检测来检测和跟踪更改是网络管理员的一项关键任务。尽管可以手动跟踪更改&#xff0c;但此方法往往非常耗时&#xff0c;并且通常会导致人为错误&#xff0c;例如在跟踪时错过关键网络设…

企业需要一个数字体验平台(DXP)吗?

数字体验平台是一个软件框架&#xff0c;通过与不同的业务系统喝解决方案集成&#xff0c;帮助企业和机构建立、管理和优化跨渠道的数字体验。帮助企业实现跨网站、电子邮件、移动应用、社交平台、电子商务站点、物联网设备、数字标牌、POS系统等传播内容&#xff0c;除了为其中…

文心一言 VS 讯飞星火 VS chatgpt (58)-- 算法导论6.4 2题

文心一言 VS 讯飞星火 VS chatgpt &#xff08;58&#xff09;-- 算法导论6.4 2题 二、试分析在使用下列循环不变量时&#xff0c;HEAPSORT 的正确性&#xff1a;在算法的第 2~5行 for 循环每次迭代开始时&#xff0c;子数组 A[1…i]是一个包含了数组A[1…n]中第i小元素的最大…

如果微信消息显示“已读”的话......

近日&#xff0c;一则 #如果微信显示已读的话# 话题冲上了微博热搜榜单。 “已读”是很多社交软件拥有的功能&#xff0c;如果对方接收并查看了消息&#xff0c;就会在消息上显示“已读”&#xff0c;但目前微信还没有推出这项功能。 对于“已读”功能&#xff0c;不少网友纷纷…

自动化用例编写思路 (使用pytest编写一个测试脚本)

目录 一&#xff0c;明确测试对象 二&#xff0c;编写测试用例 构造请求数据 封装测试代码 断言设置 三&#xff0c;执行脚本获取测试结果 四&#xff0c;总结 经过之前的学习铺垫&#xff0c;我们尝试着利用pytest框架编写一条接口自动化测试用例&#xff0c;来厘清接口…

【CNN记录】pytorch中BatchNorm2d

torch.nn.BatchNorm2d(num_features, eps1e-05, momentum0.1, affineTrue, track_running_statsTrue, deviceNone, dtypeNone) 功能&#xff1a;对输入的四维数组进行批量标准化处理&#xff08;归一化&#xff09; 计算公式如下&#xff1a; 对于所有的batch中样本的同一个ch…

商城-学习整理-基础-环境搭建(二)

目录 一、环境搭建1、安装linux虚拟机1&#xff09;下载&安装 VirtualBox https://www.virtualbox.org/&#xff0c;要开启 CPU 虚拟化2&#xff09;虚拟机的网络设置3&#xff09;虚拟机允许使用账号密码登录4&#xff09;VirtualBox冲突5&#xff09;修改 linux 的 yum 源…

PyCharm 常用快捷键

目录 1、代码编辑快捷键 2、搜索/替换快捷键 3、代码运行快捷键 4、代码调试快捷键 5、应用搜索快捷键 6、代码重构快捷键 7、动态模块快捷键 8、导航快捷键 9、通用快捷键 1、代码编辑快捷键 序号快捷键作用1CTRLALTSPACE快速导入任意类2CTRLSHIFTENTER代码补全3SHI…

$.getScript()方法获取js文件

通过$.getScript(‘xxxx.js’)获取xxxx.js文件&#xff0c;这时的ajax是一个get请求的状态&#xff0c;如果进行了入参data的赋值那么他就会跟在url后面,同理获取json文件&#xff0c;css文件。 一开始没想起这茬。。。

曲师大2023大一新生排位赛-B.Sort题解

题目描述 插入排序是一种非常常见且简单的排序算法。王同学是一名大一的新生&#xff0c;今天许师哥刚刚在上课的时候讲了插入排序算法。 假设比较两个元素的时间为 &#xff0c;则插入排序可以以 的时间复杂度完成长度为 n&#xfffd; 的数组的排序。不妨假设这 n 个数字分…

如何在PADS Logic中查找器件

PADS Logic提供类似于Windows的查找功能&#xff0c;可以进行器件的查找。 &#xff08;1&#xff09;在Logic设计界面中&#xff0c;将菜单显示中的“选择工具栏”进行打开&#xff0c;如图1所示&#xff0c;会弹出对应的“选择工具栏”的分栏菜单选项&#xff0c;如图2所示。…

IDE /字符串 /字符编码与文本文件(如cpp源代码文件)

文章目录 概述文本编辑器如何识别文件的编码格式优先推测使用了UTF-8编码&#xff1f;字符编码的BOM字节序标记重分析各文本编辑器下的测试效果Qt Creator的文本编辑器系统记事本VS的文本编辑器Notepad 编译器与代码文件的字符编码ANSI编码其他 概述 前期在整理 《IDE/VS项目属…