正则中常见的4种匹配模式

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【2月更文挑战第12天】

所谓匹配模式,指的是正则中一些改变元字符匹配行为的方式,比如匹配时不区分英文字母大小写。常见的匹配模式有 4 种,分别是不区分大小写模式、点号通配模式、多行模式和注释模式。


1、不区分大小写模式(Case-Insensitive)

当我们把模式修饰符放在整个正则前面时,就表示整个正则表达式都是不区分大小写的。模式修饰符是通过 (? 模式标识) 的方式来表示的。  我们只需要把模式修饰符放在对应的正则前,就可以使用指定的模式了。在不区分大小写模式中,由于不分大小写的英文是 Case-Insensitive,那么对应的模式标识就是 I 的小写字母 i,所以不区分大小写的 cat 就可以写成  (?i)cat。


如果用正则匹配,实现部分区分大小写,另一部分不区分大小写,这该如何操作呢?就比如说我现在想要,the cat 中的 the 不区分大小写,cat 区分大小写。也就是 ((?i)the) cat。

  • 不区分大小写模式的指定方式,使用模式修饰符 (?i);
  • 修饰符如果在括号内,作用范围是这个括号内的正则,而不是整个正则;
  • 使用编程语言时可以使用预定义好的常量来指定匹配模式。


2、点号通配模式(Dot All)

正则中提供了一种模式,让英文的点(.)可以匹配上包括换行的任何字符。这个模式就是点号通配模式,有很多地方把它称作单行匹配模式。

单行的英文表示是 Single Line,单行模式对应的修饰符是 (?s)。


3、多行匹配模式(Multiline)

通常情况下,^匹配整个字符串的开头,$ 匹配整个字符串的结尾。多行匹配模式改变的就是 ^ 和 $ 的匹配行为。


多行模式的作用在于,使  ^ 和 $ 能匹配上每行的开头或结尾,我们可以使用模式修饰符号 (?m) 来指定这个模式。


这个模式有什么用呢?在处理日志时,如果日志以时间开头,有一些日志打印了堆栈信息,占用了多行,我们就可以使用多行匹配模式,在日志中匹配到以时间开头的每一行日志。


4、注释模式(Comment)

很多语言也支持在正则中添加注释,让正则更容易阅读和维护,这就是正则的注释模式。正则中注释模式是使用 (?#comment) 来表示。


比如我们可以把单词重复出现一次的正则 (\w+) \1 写成下面这样,这样的话,就算不是很懂正则的人也可以通过注释看懂正则的意思。

(\w+)(?#word) \1(?#word repeat again)


  • 不区分大小写模式,它可以让整个正则或正则中某一部分进行不区分大小写的匹配。
  • 点号通配模式也叫单行匹配,改变的是点号的匹配行为,让其可以匹配任何字符,包括换行。
  • 多行匹配说的是 ^ 和 $ 的匹配行为,让其可以匹配上每行的开头或结尾。
  • 注释模式则可以在正则中添加注释,让正则变得更容易阅读和维护。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
机器学习/深度学习 Web App开发 JavaScript
正则Regester
正则Regester
103 0
正则Regester
|
网络协议 JavaScript 前端开发
正则表达式、常用的正则
正则表达式、常用的正则
154 1
|
数据安全/隐私保护
正则表达式_2
学习自编程胶囊课程。
106 1
正则表达式_2
|
数据可视化 Linux
【常用正则大全】
【常用正则大全】
264 0
【常用正则大全】
|
新能源 Java 区块链
【常用正则大全】2
【常用正则大全】2
296 0
【常用正则大全】2
|
数据采集 人工智能 Go
正则处理
正则处理
79 0
|
XML 数据安全/隐私保护 数据格式
正则表达式 - 常用正则总结
正则表达式 - 常用正则总结
119 0
x3d
|
机器学习/深度学习 JavaScript 前端开发
正则这个小东东
需要我们用程序处理的数据并不总是预先以数据库思维设计的,或者说是无法用数据库的结构去存储的。 比如模版引擎解析模版、垃圾敏感信息过滤等等。 一般这种情况,我们用正则按我们的规则去匹配preg_match、替换preg_replace。
x3d
1050 1