正则表达式

正则表达式


开发工具与关键技术:RegexBuddy 4
作者:林敏静
撰写时间:2019年5月3日

正则表达式,又称为规则表达式,英文名为Regular Expression,在代码中常简写为regex、regexp或RE,常被用来检索、替换那些符合某个模式(规则)的文本,通俗地来说正则表达式是用于进行文本匹配的工具,本文主要讲正则表达式里的一些基础,还有比较常见的字符、方法。

我们来看一下它的页面(如下图),正则里基础语法规则大体一致,但每门语言具体来说又有点差别,这里我们使用的是C#,本文主要讲字符串的匹配还有替换。
在这里插入图片描述 先来看看看匹配是怎样的(如下图),比如说输入一个字母A,那么它就会在下面的字符串中把字母A匹配出来(有颜色标识的)。在这里插入图片描述

如果说我们想要找到的只是单个字母A,而不是带字母A的单词,那该如何操作呢?这时我们就要用到正则表达式规定的一个特殊代码\b,我们也把它叫做元字符,匹配单词的开始或结束位置,而且\b是只匹配一个位置的,那么我们使用它就可以准确地匹配出字母A(如下图),

在这里插入图片描述

除了\b这个元字符外,还有其它的元字符,下面我们来看一下,

如 .这个是英文状态下的句号,比较小(一开始学习的时候我都没看到有这个点还以为是空格),千万不要忽略它哦!.它是匹配除换行符以外的任意字符的(如下图):
在这里插入图片描述

\w,它是匹配数字或字母或下划线或汉字(如下图):

在这里插入图片描述

\s,它是匹配任意的空白符,比如空格或换行符(如下图):
在这里插入图片描述

还有其它的元字符请看下边的表格,就不一一图片举例了(如下表格)。

元字符

.

匹配除换行符以外的任意字符

\w

匹配数字或字母或下划线或汉字

\s

匹配任意的空白符

\d

匹配数字等价于[0-9] [匹配指定范围]

\b

匹配单词的开始或结束

^

匹配字符串的开始

$

匹配字符串的结束

除了元字符还有反义字符和限定符,反义字符呢它的字符含义与元字符的恰好相反,那什么时候能用到反义字符呢,在你有时需要查找不属于某个能简单定义的字符,就比如想查找除了数字以外的任意字符,这时需要用到反义字符了(如下表格),

反义字符

\W

匹配任意不是字母,数字,下划线,汉字的字符

\S

匹配任意不是空白符的字符

\D

匹配任意非数字的字符

\B

匹配不是单词开头或结束的位置

[^x]

匹配除了x以外的任意字符

限定符呢就是限定匹配内容出现的次数,就是重复出现多少次(如下表格)。

常用限定符

重复零次或更多次

重复一次或更多次

?

重复零次或一次

{n}

重复n次

{n,}

重复n次或更多次

{n,m}

重复n到m次

比如说现在匹配一个11位数电话号码(如下图),以13开头匹配13后面的9位数字,也就是匹配13后面出现的9个数字,{n}表示的是匹配的次数,{9}就是匹配9次,加上前面匹配13加匹配数字9次就成功匹配出了这个电话号码。

在这里插入图片描述

那么讲完限定符之后接下来讲的是正则表达式里面的替换。正则表达式里的替换指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开.

替换可以使用多种匹配规则,接下来使用这个方法匹配三种不同格式的电话号码(如下图)

在这里插入图片描述

以上是使用了三个不同的规则匹配三个不同格式的电话号码,说明了替换可以使用多个规则来匹配。

特别强调,在使用替换时顺序是很重要的,因为在匹配替换时,是从左到右地测试每个分枝的条件,如果满足了某个分枝的条件,就不会去管其它的替换条件了。

接下来要讲的是分组语法里面的零断宽言(如下表格)。

零断宽言

(?=exp)

匹配exp前面的位置

(?<=exp)

匹配exp后面的位置

(?!exp)

匹配后面跟的不是exp的位置

(?<!exp)

匹配前面不是exp的位置

这里我们挑其中两个方法来讲一个例子,

例子:<img οnlοad=“AutoResizeImage(200,200,this)“src=”/Document/Title/Temp/2017-12-114bc5.png”

(?=exp)
是匹配exp前面的位置,也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp,也就是匹配exp前面的数据,这里使用(?=exp)来匹配的是例子中的src前面的数据,(如下图)。

在这里插入图片描述

这样我们就匹配到了src前面的内容,既然能匹配前面的同样后面的也能匹配,(?<=exp)就是匹配exp后面的位置,(?<=exp)也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp,接着使用这个来匹配src后面的数据(如下图)

在这里插入图片描述

还有贪婪匹配与懒惰匹配,听到这个名称是不是很新奇(反正我刚学习的时候就觉得)。什么是贪婪匹配呢?就是当正则表达式中包含能接受重复的限定符时,就是在使整个表达式能得到匹配的前提下,匹配尽可能多的字符,这被称为贪婪匹配。懒惰匹配呢就和贪婪匹配相反,它是匹配尽可能少的字符,懒惰限定符就是在限定符的后面加上个问号?(如下表格)

懒惰限定符

*?

重复零次或更多次,但尽可能少重复

+?

重复一次或更多次,但尽可能少重复

??

重复零次或一次,但尽可能少重复

{n}?

重复n次,但尽可能少重复

{n,}?

重复n次或更多次,但尽可能少重复

{n,m}?

重复n到m次,但尽可能少重复

相对于贪婪匹配,懒惰匹配使用得多一点,下面就举一个懒惰匹配的例子(如下图),用懒惰限定符在字符串里获取具体日期数据

在这里插入图片描述

关于正则表达式的基础学习就暂时分享到这里,这些都是比较基础,常用的一些正则,希望能对你有所帮助。

注:正则表达式及字符详解源于课堂讲义,本文仅为总结学习分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值