浅析正则表达式模式修正符

正则表达式之模式修正符

众所周知,我们可以利用正则表达式在文本中匹配自己想匹配的字符,而为了方便我们匹配字符,于是出现了一种帮助匹配的字符,叫做:

模式修正符

模式修正符可以帮我们提高自己工作的效率,接下来我们就来介绍一下模式修正符。

1.介绍

​对于模式修正符,其实就是在正则表达式后面加上一个“/”,再在后面加上一些特定的字母,便可以对匹配的字符做出限定,而这个限定是全局的,也就是说,它的优先级是最高的

2.字符

​而在“/”后面可以加上的字符有这些:

字符原词含义
gglobal匹配全部可匹配结果
mmulti line多行模式(此模式下^和$可以分别匹配行首和行尾)
iinsensitive不区分大小写
xextended忽略空白字符,可以多行书写,并使用#进行注释说明
ssingle line单行模式(此状态下”.“可以匹配任意字符,包括换行符)
uunicode模式字符串被当作UTF-8
UUngreedy使量词默认为非贪婪模式
AAnchored从目标字符串的开头开始匹配
Z从目标字符串的末尾或出现在字符串末尾的 \n 之前开始匹配
z从目标字符串的末尾开始匹配
JJchanged允许子模式重复命名
DDollar end only 字 符 仅 匹 配 目 标 字 符 串 的 结 尾 ; 没 有 此 选 项 时 , 如 果 最 后 一 个 字 符 是 换 行 符 的 话 字符仅匹配目标字符串的结尾;没有此选项时,如果最后一个字符是换行符的话 字符也能匹配

3.实例

​话不多说,上图

​例子:
在这里插入图片描述
首先我们选择匹配abc

1)g:匹配全部可匹配结果

未加“g”之前
在这里插入图片描述
加了“g”后
在这里插入图片描述
(ps:我使用的网址是直接点击“g”就可以调整模式修正词了)

​ 可以看出未加“g”之前只能匹配一个结果,加上“g”后就可以匹配多个结果。

2)m:多行模式(此模式下^和$可以同时匹配行首和行尾)

此模式下可以同时运用元字符“^”和“$”

未加“m”之前:
在这里插入图片描述
加上“m”以后:
在这里插入图片描述
但有一点要注意,当它们同时出现在同一段字符的时候,它们只会匹配这一段字符占了一行的字段(“g”和“m”同时加上)

比如我决定匹配“ac”,单独加上“^”和“$”分别是这样的:
在这里插入图片描述
在这里插入图片描述
而两个一起放上去是这样的:
在这里插入图片描述

可以发现,单独使用“^”和“$”匹配都会出现两次结果,而两个一起加上去只出现了一个结果,而且这个结果前两次也出现过,这是什么情况?

似乎有点像找公倍数。

再换个字符试试看。

^bc$

在这里插入图片描述

欸,这又是什么意思?怎么一个都没匹配到?

把“^”去掉试试看
在这里插入图片描述
一下子多出了五个!

这下搞懂了,当我们同时对一段字符加上“^”“$”时,它只会匹配占了一行的这一段字符。

为了验证猜想,试着在加上一行“bc”试一试。
在这里插入图片描述
果然如此!

3)i:不区分大小写

“i”可以帮我们不区分大小写地去匹配字符,某些场景可以发挥很大的作用

为了方便大家观察,我选择加上“g”一起实验

未加“i”之前:
在这里插入图片描述
加上“i”之后:
在这里插入图片描述
可以发现匹配的结果多出了一个“Abc”

4)x:忽略空白字符,可以多行书写,并使用#进行注释说明

“x”的作用是忽略空白字符,可以多行书写,还可以使用#进行注释说明

​这次需要分三次讲解

首先看“x”的第一个作用:忽略空白字符

直接上图吧

未加“x”之前:
在这里插入图片描述
加上“x”之后:
在这里插入图片描述
可以发现,加上“x”之后正则表达式直接忽略了空格直接开始匹配

这很好理解,第二个作用和第一个也是一样的,只是把空格换成了回车

未加“x”之前:
在这里插入图片描述
加上“x”之后:
在这里插入图片描述
可以看到正则表达式直接忽略了回车直接选择匹配

​ 前面两种都比较简单,第三种也一样简单

​ 使用#进行注释说明,大家都知道“#”是注释的意思,加上了就可以把“#”后的字符忽略,正则表达式也是一样的

​ 未加“x”之前:
在这里插入图片描述
加上"x"之后:
在这里插入图片描述

可见“bc”直接被注释掉了,只剩下“a”

​ 由此可见加上“x”之后就可以使用“#”了。

4)s:单行模式(此状态下”.“可以匹配任意字符,包括换行符)

​ 之前讲过,”.“可以匹配任意字符,但独独不能匹配换行符,当我们选择了“s”时,”.“就可以匹配换行符了。

​ 例子:

a.c

​ 未加”s“之前:
在这里插入图片描述
加上”s“之后:
在这里插入图片描述
可以看到使用”s“以后就可以匹配任何”aXc“格式的字符了,包括换行符

5)u:模式字符串被当作UTF-8

​ 当我们选择“u”时,模式字符串就会被正则表达式当作UTF-8。这个不过多解释。

6)U:使量词默认为非贪婪模式

​ 关于这个“U”稍稍有些难以理解,它可以使量词默认为非贪婪模式,这是什么意思呢?

​ 看下图:
在这里插入图片描述
在这里插入图片描述
上面是未加上“U”之前的情况,第一张图是贪婪模式,第二张是非贪婪模式,这很正常,但加上“U”之后就不对劲了(贪婪模式和非贪婪模式详见上一篇文章,本文结尾有链接)。

​ 看下图:
在这里插入图片描述
在这里插入图片描述
可以发现本该贪婪模式出现的情况却在非贪婪模式出现了,而非贪婪模式也一样。

于是可以得出结果:选择用“U”时,正则表达式就会默认非贪婪模式,当我们尝试用贪婪匹配的时候,它会给出非贪婪模式所匹配的结果

7)A:从目标字符串的开头开始匹配

这个“A”和我们之前学的元字符“^”的作用是一样的。也就是从开头开始匹配,默认是匹配第一个想匹配的字符。

未加“A”之前:
在这里插入图片描述

加上“A”以后:
在这里插入图片描述

8)Z:从目标字符串的末尾或出现在字符串末尾的 \n 之前开始匹配

​这个“Z”的作用和元字符“$”一样。这和”A“是相同的,不再过多赘述(我使用的正则表达式网页并没有这个修正词,所以也不去截屏了)

9)z:从目标字符串的末尾开始匹配

​同上,只是比”Z“少了一个功能

10)J:允许子模式重复命名

​这个”J“是用子模式的时候使用的,暂时不去多讲,后面学到了再讲。

11)D:$ 字符仅匹配目标字符串的结尾;没有此选项时,如果最后一个字符是换行符的话,$ 字符也能匹配

当我们选中”D“时,$ 字符仅匹配目标字符串的结尾。这似乎和没加是一样的,但其实不然。没有选择”D“时,如果最后一个字符是换行符的话,$字符也是可以匹配的

​未加”D“之前:
在这里插入图片描述
加上”D“之后:
在这里插入图片描述

可以看到确实上面所讲的一样。

4.总结

至此,已经讲完了绝大部分的内容,如果还有我没有讲到的,那是因为我目前的能力不够导致的,我会继续努力,谢谢!

本文运用的正则表达式网址为:https://regex101.com/

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值