正则表达式

news/发布时间2024/5/16 0:20:06
正则表达式网站教程:https://www.runoob.com/regexp/regexp-metachar.html
学习视频:https://www.bilibili.com/video/BV1mt4y1o7Rh/?spm_id_from=333.788&vd_source=432ba293ecfc949a4174ab91ccc526d6

正则表达式介绍:

正则表达式是一种用于匹配和操作文本的工具
常用于文本查找、文本替换、文本格式检验等场景
正则表达式不仅写代码会使用,常见的文本编辑软件(如notepad++)也支持正则表达式搜索或者替换的
 
正则表达式实质上是一段文本,或者说是一条字符串

1、检验字符串是否符合邮箱格式

正则表达式:^[\w\.\-\+]+@[\w\.-]+\.\w+$
校验字符串(通过):test1-pass@163.com
检验字符串(不通过):test1-pass@.com
 

2、匹配文本中所有字母a开头的单词

正则表达式:\b[aA]\w*\b
匹配文本:Apple is a fruit, and it starts with an A
 
日常办公开发中,正则表达式可用于字符串或者文本的查找、替换、格式校验
在notpad++查找所有包含a的字符
0
 
正则表达式的优缺点:
优点:功能强大,有效缩减代码量,提高维护性
缺点:性能较慢,每次执行程序都需要重新解析正则表达式
 
 

正则表达式常用语法:

下面为最为通用的正则表达式标准
正则表达式的匹配行为是由元字符决定的:

1、普通字符:明确的关键字

普通字符可理解为明确的关键字,主要包括文字字符、符号
-文字字符指的是英文字母、数字、中文这些字符
-符号指的是@、%、_这些符号字符
 
文字字符在正则表达式中直接写就可以了:
例如:匹配文本中的get:I need to get a new boot
 
在正则表达式中一部分符号需要转义:
需要转义的特殊符号:
需要转义的符号字符
需要转义的符号字符
.
*
\
+
[
?
]
{
(
}
)
|
^
$
例如:匹配文本中的get*:
正则表达式:get\*
匹配文本:I need to get* a new book
 
还有一些不太常用的字符,如非打印字符、unicode编码值等
非打印字符
说明
其他字符
说明
\n
换行符
\x00
16进制转义值,2位16进制数,如\x20表示空格
\r
回车符
\000
8进制转义值,3位8进制数,如\040表示空格
\f
换页符
\u0000
unicode编码值,4位16进制数,如\u0000表示空格
\t
制表符
   
\v
垂直制表符
   
 
 

2、字符集合:关键字的取值范围

2.1 单个关键字的值的范围,包含在一对[]中间

-如[eo]表示匹配a或e
如下在view命令行匹配:
0
字符集合适合明确某个字符的范围的模糊匹配,则这多个关键字中只有个别字符存在差异的情况
字符集合是单个关键字的值的范围,若差异不仅仅在一个字符上,则不适合采用字符集合
示例:匹配文本中的get和goat
正则表达式语法:g(e|oa)t
0
字符集合可以简化连续值的范围,使用-符号
如[a-d]等价于[abcd]
如[a-dz]等价于[abcdz]
如[_\-]字符集合中匹配-需要转义
示例:g[a-c]t
 

2.2 设置字符集合位排除在外的值范围,使用^符号,脱子符号

如[^a-b]等价于除去a、b、c、d以外的字符都可以
如[^@\+]等价于除去@、+以外的字符都可以
示例:g[^o]t
 
 

3、限定符:给前一个字符追加出现次数范围

3.1 给前一个字符追加出现次数的范围

常用的限定符位*、+、?
*表示匹配零次或多次
示例:匹配文本中的god、good、gooood的单词
正则表达式:go+d
 

3.2 使用{}标注具体次数

{3}表示出现3次
{3,}表示出现3次或以上
{3,6}表示出现3-6次
如:go{2,3}d
 

3.3 模糊搜索

限定符前面位模糊搜索时,会发生贪婪匹配的问题
正则表达式(贪婪匹配):g[a-z]+d,贪婪匹配会匹配到gadxxgod
正则表达式(非贪婪匹配):g[a-z]+?d,非贪婪匹配不会匹配到gadxxgod
 
 

4、定位符:标记匹配位置的元字符

标记匹配位置的元字符
定位符只有四个:
^表示字符串开始的位置
$表示字符串结束的位置
\b表示单词边界,字符与空格间的位置
\B表示非单词边界
示例:正则表达式:^1[0-9]{10}$,用来匹配手机号码
 

5、子表达式:内嵌的子正则表达式

子表达式 内嵌的子正则表达式,包含在一对()中
子表达式与正则表达式语法相同,且允许子表达式内再嵌套子表达式
示例:g(e|oa)t
 

5.1 子表达式可看成一个整体

如:(got)+,则可匹配文本gotgot
 

5.2 子表达式用|分割多个子表达式

 

5.3 匹配文本

如([a-z])\1([a-z])\2,()表示子表达式,标记一个子匹配内容,[a-z]表示a-z的字符集合,\1表示与第一个子匹配项相同的内容,\2表示与第二个子匹配项相同的内容
0
 

5.4 预查匹配项

5.4.1 (?=)表示正向肯定预查

放在表达式末尾,如:
ab(?=c)匹配abc,不匹配ab_
 

5.4.2 (?!)表示正向否定预查

放在表达式末尾,如:
ab(?!c)表示不匹配abc,匹配ab
 

5.4.3 (?<=)表示反向否定预查

放在表达式开头,如:
(?<=a)bc表示匹配abc,不匹配_bc
 

5.4.4 (?<!)表示反向否定预查

放在表达式开头,如:
(?<!a)bc表示不匹配abc,匹配_bc

 
 

6、省略符:为了简化正则表达式的元字符

省略符是为了简化正则表达式而存在的元字符,以\开头
正则表达式\d+等效于[0-9]+,\d表示0-9数字的省略符,+表示出现1次或者多次的限定符
常用的省略符如下所示:
省略符
等效
说明
.
[^\n\r]
匹配除换行符之外的任何单个字符
\d
[0-9]
匹配一个数字字符
\D
[^0-9]
匹配一个非数字字符
\s
[\f\n\r\t\c\v]
匹配任何空白字符,包含空格/制表符/换页符等
\S
[^\f\n\r\t\c\v]
匹配任何非空白字符
\w
[A-Za-Z0-9_]
匹配一个字符/数字/下划线字符
\W
[^A-Za-Z0-9_]
匹配一个非字符/数字/下划线字符
 
 

7、修饰符:指定匹配策略

修饰符是指定匹配策略的,不是正则表达式的一部分,如不区分大小写,多行匹配等
修饰符可叠加使用,某些正则表达式代码库可能存在特别的修饰符
常用4种修饰符:
修饰符
说明
i
将匹配设置为不区分大小写,如A和a没有区别
g
查找所有的匹配项
m
多行匹配
s
默认情况下的圆点.是匹配除换行符\n之外的任何字符,加上s修饰后,.中包含换行符\n
 
 
 
 

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

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

相关文章

UVM - 12(driver and monitor 练习)

uvm exercise-1实现apb_sequencer.sv,传输数据类型式abp_trans 实现virtual sequencer.sv,定义两个sub sequencer:mst_sqr,slv_sqrclass abp_sequencer extends uvm_sequencer #(apb_trans);`uvm_component_utils(apb_sequencer);function new(string name,uvm_component paren…

软件工程——代码泛读结对

一、练习要求(主要是将项目上传至gitee) 1.源码组织方式(给出仓库地址): (1) 创建针对本作业的项目和软件版本库,在版本库中建立“src”和“doc”两个文件夹,分别存储软件系统的源代码和报告文档 (2) 建立master、develop以及成员分支(a_branch),将当前版本存入master目…

使用 WXT 开发浏览器插件(上手使用篇)

WXT (https://wxt.dev/), Next-gen Web Extension Framework. 号称下一代浏览器开发框架. 可一套代码 (code base) 开发支持多个浏览器的插件. 上路~ WXT 提供了脚手架可以方便我们快速进行开发,但是我们得先安装好环境依赖,这里我们使用 npm, 所以需要安装下 node,可以参考…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的安全帽检测系统(深度学习模型+UI界面代码+训练数据集)

开发先进的安全帽识别系统对提升工作场所的安全性至关重要。本文详细介绍了使用深度学习技术创建此类系统的方法,并分享了完整的实现代码。系统采用了强大的YOLOv8算法,并对其与YOLOv7、YOLOv6、YOLOv5的性能进行了详细比较,包括关键指标如mAP、F1 Score等。文章深入分析了Y…

SAP:检索帮助扩展

TABLES参数已过时!(TABLES parameters are obsolete!) 一般解决方法: TABLES 参数已过时!把 TYPE 改成 LIKE 多回车,就可以保存了。检索帮助扩展(Search Help Exit)中可以指定函数修改检索帮助的查询条件及结果数据。 首先创建函数后练习将此函数分配到检索帮助扩展中的实例…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的夜间车辆检测系统(深度学习代码+UI界面+训练数据集)

开发夜间车辆检测系统对于自动驾驶技术具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个夜间车辆检测系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5,展示了不同模型间的性能指标,如mAP、F1 Score等。文章深入解释了Y…