原来正则表达式这么简单

智善
• 阅读 1537

作为一个程序员,我们在日常的开发过程中需要对一些文本内容进行快速查找匹配以及内容替换等操作,而我们最常用的方法就是通过正则表达式来实现。什么是正则表达式呢?我们可以理解为是一种专门处理文字的工具,通过制定规则来匹配文字的位置或者内容,对结果进行操作。

开始

一个完整的正则表达式通常由两部分组成普通的字符、不普通的元字符。普通字符很好理解指的就是26个英文字母大小写a(A)~z(Z)和数字0~9,不普通的元字符从字面上可以看出点特殊,元字符其实就是指具备一些特殊含义的字符 例如 ".*?+^$"等,那么字符和元字符可以互转嘛?答案是可以的,神奇的元字符反斜杠""也可以实现这个功能,客官别不信,我们接着看~~

字符匹配

在正则表达式中我们可以通过普通的字母和数字组成最基本的匹配规则,对内容进行一一对应,例如 我们现在想在"hello,world!"中找到"hello",我们通过 /hello/ 正则表达式就可以了。

但单单只通过普通字符匹配往往是不能满足我们的需求的,例如 现在有一段内容"***分割线***",我们希望把内容中的""替换成"-",可""是元字符具有特殊含义,因此这个时候指通过普通字符是无法实现的,但通过转义字符\就可以实现,后面我们会讲到。

元字符匹配

正则表达式中有着丰富的元字符提供,这里我们选择常用的进行具体讲解。

多字符匹配

在字符匹配章节我们举例从"hello,world!"中找到"hello",我们通过一一对应的方式筛选对应的字符,但在实际场景中我们经常会遇到一对多的情况,例如"hello,xx!","xx"对应的可能是"world"也可能是任意其他字符,这个时候我们通过单字符匹配的话显然很低效,如果能有一种模式涵盖表示这类字符岂不快哉,各位看官,现在我们推出第一个元字符,代表集合含义的[],集合顾名思义就是某一类的合,现在我们对正则进行改写即 /hello,[abc]/ ,这时候我们可以同时匹配a,b,c三个字符,但这种写法依然很低效,我们需要一个能表示区间的字符,区间元字符 - 正合适,这时候我们可以写成 /hello,[a-z]/ ,这时候我们就可以匹配所有26个小写英文字母了,即便如此,在某些场景下我们单单有集合和区间去匹配多个字符也是很低效的,所以正则表达式衍生出了很多可以匹配多个字符的简写方式:

正则表达式 含义
. 换行符之外的任意字符
d 数字 0~9 (即[0-9])
D 与\d相反,表示 除了数字0~9的任意字符
w 26个大小写字母、数字、下划线(即[a-zA-Z0-9_])
W 与\w相反,表示 除了基本字符下划线的任意字符
s 空字符,包括 制表符、换页符、换行符、空格
S 与\s相反,表示 非空字符​

数量匹配

我们在进行对字符匹配的时候往往需要对匹配的字符数量进行限制,本章节就数量元字符进行讲解,从字面意义可以看出数量元字符肯定就是对匹配字符的个数进行限制啦,例如 同样是上面的"hello,world",我们需要找出"hello",一种方式通过单子符匹配方式即 /hello/ ,其实我们还可以对其进行简化,表示精确区间范围的 {min,max} or{num}元字符,"hello"中"l"出现了两次,那么我们就可以改写成 /hel{2}o/ ,当然这个例子比较简单,我们换个复杂一点的,现在我们需要从"OObama like bababanana ..."中找出"ba"连续出现2次以上的地方,从内容上可以看出"ba"出现的地方有两处,这个时候我们实际要找的是"bababa",所以我们可以写成 /ba{2,}/ ,除了 {} 外,正则表达式还有很多用来数量匹配的元字符:

正则表达式 含义
? 匹配0或1个字符(即0|1
* 匹配0或者多个字符(即0|n
+ 匹配1或者多个字符(即1|n
{min,max} or {num} 精确区间匹配,min表示最少,max表示最多个数,num表示精确个数

位置匹配

位置元字符主要是用来限制查找内容的范围,例如限制在内容的开头或者内容的结尾等,举个例子 "Hello,World!Hello, China"我们想查找开头的"Hello",但内容中"Hello"出现了两次,因此我们需要一个可以限制查找范围为内容开头的元字符, /^/ 表示匹配表达式的开头,所以我们改为/^Hello/,有客官举报说,大骗子,我通过 /Hello/ 也可以匹配到,好,我们换一个,现在改成"World is my World!",我需要匹配第二个"World",这...不慌不慌,我们通过 /$/ 限制查找范围是表达式的结尾就可以了,即 /World$/ ,除了限制范围是开头、结尾,我们还可以通过 /\b/ 来限制单词的边界,或者 /(?=xx)/ 来匹配某个(xx)前面的内容符合表达式的字符,通过 /?<=xx/ 来匹配某个后面的内容符合表达式的字符,举个例子现在有"People like apple",我想在所有ple的单词中找到符合ple前面为"ap"的那个ple,则可以写成/(?<=ap)ple/,总结正则表达式中对位置进行匹配的元字符有:

​正则表达式 含义
^ 匹配表达式的开头
$ 匹配表达式的结尾
b 匹配单词的边界
B 匹配非单词的边界
(?=xx) 向前匹配符合xx规则的副词
(?!xx) 向前匹配不符合xx规则的副词
(?<=xx) 向后匹配符合xx规则的副词
(?<!xx) 向后匹配不符合xx规则的副词

模式匹配

通过正则表达式进行内容匹配的时候,我们会遇到对全文内容匹配、多行内容匹配等场景,正则表达式也提供了三种模式元字符进行模式匹配。g表示全局模式,即匹配所有的内容;i表示忽略大小写,即匹配内容的时候忽略字母的大小写;
m表示多行匹配模式,即对多行内容进行匹配,并且各种模式可以混合使用,例如"Hello World, hello China",我们需要匹配所有的"Hello"且不区分大小写,即/hello/ig

正则表达式 含义
g 匹配全局模式
i 匹配不区分字母大小写
m 匹配多行模式

点赞
收藏
评论区
推荐文章
半臻 半臻
4年前
Python基础11——正则表达式
19正则表达式19.1正则基础正则表达式:字符串处理工具应用场景1.html查询2.验证字符串是否符合规则re模块match方法python通过正则表达式对字符串进行匹配importre使用match方法进行匹配操作re.match()从字符串的开始位置进行匹配,匹配成功,返回match对象。匹配失败,返回Noneresre
Stella981 Stella981
3年前
Python3正则表达式
在Python中使用正则表达式Python语言通过标准库中的re模块(importre)支持正则表达式。使用match方法匹配字符串匹配字符串也就是设定一个文本模式,然后判断另外一个字符串是否符合这个文本模式。importre
Wesley13 Wesley13
3年前
C# 篇基础知识7——字符串
文字是信息的主要表达方式,因此文字处理是计算机的一项重要功能之一。现在来深入研究C中字符串的各种特性、正则表达式的基本概念以及如何用正则表达式进行文本匹配。1.char结构C中的字符用System命名空间中的Char结构实现,每个Char占用2字节空间,用于存储字符的Unicode编码。C专门设计了char关键字用来声明字符变量,cha
Stella981 Stella981
3年前
Javascript中的正则表达式
正则表达式提供了强大的字符串检索和操作的能力,这些能力在Javascript中有着比其他语言更广泛的应用。对于运行于浏览器环境中的Javascript,HTML文档的DOM操作和样式操作是其主要任务之一,正则表达式的非凡能力正可以应用于此,如:操作DOM节点的内容、解析元素选择器、根据属性值过滤和匹配元素等等。通常总是存在其它方式实现这些操作,但正则表达式可
Stella981 Stella981
3年前
Nginx配置中Location的优先级
根据Nginx的官方文档,Location标签一共有四个修饰符,分别是:(1):表示完全匹配;(2)^~:匹配URI的前缀,并且后面的正则表达式不再匹配,如果一个URI同时满足两个规则的话,匹配最长的规则;(3)~:匹配正则表达式,大小写敏感;(4)~:匹配正则表达式,大小写不敏感;优先级:(1
Stella981 Stella981
3年前
Regex 正则表达式入门
!在这里插入图片描述(https://imgblog.csdnimg.cn/20200502170142100.jpg?pic_center)0,什么是正则表达式正则表达式(RegularExpression简写为Regex),又称为规则表达式,它是一种强大的文本匹配模式,其用于在字符串中查找匹配符
Stella981 Stella981
3年前
JavaScript基础入门10
JavaScript基础入门10\toc\正则表达式正则表达式(regularexpression)是一个描述字符模式的对象。在JavaScript中,RegExp表示正则对象。在开发的工作当中,我们经常需要使用正则表达式强大的模式匹配、文本检索、以及替换功能。简单的说,
Wesley13 Wesley13
3年前
Java
最近处于工程尾期,抽出点时间来学习下工程中用到的知识点。1.正则表达式作用:它使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。举例:在很多文本编辑器里,正则表达式被用来检索、替换某些文字或字符串。注意:当正则表达式和字符串函数都能解决问题时,尽量使用字符串函数,这样不容易出错,最重要的一点是字符串函数比正则表达式实现性能上要好得
Stella981 Stella981
3年前
JavaScript中的正则表达式详解
摘要:javascript中的正则表达式作为相当重要的知识,本文将介绍正则表达式的相关知识和用法。正则表达式(RegularExpression)是一门简单语言的语法规范,是强大、便捷、高效的文本处理工具,它应用在一些方法中,对字符串中的信息实现查找、替换和提取操作。正则表达式在人们的印象中可能是一堆无法理解的字符,但就是这些符号却实现
胖大海 胖大海
2年前
linux常用的通配符与正则表达式
我们在很多地方都会用到通配符和正则表达式来实现我们的日常操作,提高我们的工作效率。但是很多新伙伴,往往容易将他们弄混。首先我们需要知道通配符和正则表达式的使用场景:通配符也叫文件名替换,它主要是作用于匹配文件名,常用命令是ls、find、cp、mv;正则表达式主要是作用于匹配文件中的字符串或编写脚本,常用命令命令是grep、awk、sed。大家缺乏机器练手的
小白学大数据 小白学大数据
8个月前
正则表达式在Kotlin中的应用:提取图片链接
在现代的Web开发中,经常需要从网页内容中提取特定的数据,例如图片链接。Kotlin作为一种现代的编程语言,提供了强大的网络请求和文本处理能力。本文将介绍如何使用Kotlin结合正则表达式来提取网页中的图片链接。正则表达式基础正则表达式是一种强大的文本处理
智善
智善
Lv1
祸在于贪小利,害在于亲小人。
文章
4
粉丝
0
获赞
0