我的编程空间,编程开发者的网络收藏夹
学习永远不晚

正则表达式常见的4种匹配模式小结

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

正则表达式常见的4种匹配模式小结

0.写在前面

今天一起来学习下正则中的匹配模式,所谓的匹配模式,就是指正则中的一些 改变元字符匹配行为 的方式,比如匹配时不区分英文字母的大小写。

还记得我们在第二篇文章中学过的贪婪模式、非贪婪模式和独占模式吗,这些模式会改变正则中量词的匹配行为,今天来看一些和量词无关的匹配模式,一共有4种,分别是不区分大小写模式、点号通配模式、多行匹配模式、注释模式。

1.不区分大小写模式

顾名思义,不区分大小写模式就是我想要匹配目标字符串中的Cat,我不关心是大猫CAT,还是小猫cat,只要给我匹配上就可以了。

模式修饰符是通过 (?模式标识) 的方式来表示的,我们只需要把模式修饰符放在对应的正则前面,就可以使用指定的模式了,

不区分大小写的英文是 Case-Insensitive,模式标识用首字母的小写来表示就是 (?i),上面提到的栗子正则可以这么写 (?i)cat,看下:

不区分大小写模式

上一篇文章中,我们学习了分组与引用,如果匹配两个猫就是 (?i)(cat) \1

连续匹配

对应的 Python 代码如下:


import re

result = re.findall(r"(?i)(cat) (\1)", "cat cat CAT Cat")
print(result)

输出:[('cat', 'cat'), ('CAT', 'Cat')]

可以看到,前后两个cat大小写不一致,也可以匹配上,如果我们想要匹配前后大小写一致的猫该怎么办呢,可以在外面加上一层括号 ((?i)cat) \1,看下:

连续匹配,相同大小写

测试链接:https://regex101.com/r/tPXuGX/1

注意:在 Python 语言中,使用 re 库调用上面的正则会报下面的异常,换成 regex 库就可以,但是不能准确的匹配两个大小写一致的 cat。

DeprecationWarning: Flags not at the start of the expression


import regex

result = regex.findall(r"((?i)cat) (\1)", "cat cat CAT Cat")
print(result)

输出:[('cat', 'cat'), ('CAT', 'Cat')]

2.点号通配模式

在第一篇文章中,我们学习了元字符的相关知识,还记的英文的点 . 代表什么含义吗,它可以匹配任意字符,但是不能匹配换行。当我们需要匹配真正的任意字符时,可以使用 [\s\S] 或 [\d\D] 或 [\w\W] 等来表示。

特殊单字符

但是这样写不够优雅,所以正则提供了一种模式,让英文的 . 能够匹配上换行在内的所有字符,这种模式就叫做点号通配模式。

点号通配模式,在很多地方被称为单行模式,英文表示为 Single Line,取其首字母,所以单行模式对应的修饰符是 (?s),举个栗子:

点号通配模式

3.多行匹配模式

在正则中 ^ 用于匹配整个目标字符串的开头,$ 用户匹配整个目标字符串的结尾:

非多行匹配模式

如果我们想要让表达式匹配上每行的开头和结尾呢,多行匹配模式就上场了,多行的英文是 Multiline,所以多行模式对应的修饰符是 (?m),看下效果:

多行匹配模式.png

4.注释模式

当我们写了一大长串的表达式之后,当时可能只有你和上帝知道它什么意思,过了半年,就只有上帝知道它什么意思了。

注释的英文是 Comment,所以注释模式对应的修饰符是 (?#comment),注意没有用首字母,还多了一个 # 号,拿我们之前写的 IPv4 地址匹配正则举个例:

复制代码 代码如下:

^(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?#comment IP地址第一个值)(?:\.(?:0|[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}(?#comment IP地址后三个值)$

在很多编程语言中也提供了 x 模式来书写正则,也可以起到注释的作用,以 Python 为例:


import re

regex = r'''(?mx)  # 使用多行模式和x模式
^          # 开头
(\d{4})    # 年
(\d{2})    # 月
$          # 结尾
'''

result = re.findall(regex, '202006\n202106')
print(result)

输出:[('2020', '06'), ('2021', '06')]

在 x 模式下,所有的换行和空格都会被忽略,如果要匹配的话,可以把换行和空格转义,或者放在字符组中:


import re

regex = r'''(?mx)  # 使用多行模式和x模式
^          # 开头
(\d{4})    # 年
[ ]        # 空格
(\d{2})    # 月
$          # 结尾
'''

result = re.findall(regex, '2020 06\n2021 06')
print(result)

输出:[('2020', '06'), ('2021', '06')]

5.写在最后

最后在总结下上面讲到的内容:

思维导图

正则表达式在线校验工具:https://regex101.com/

到此这篇关于正则表达式常见的4种匹配模式小结的文章就介绍到这了,更多相关正则表达式 匹配模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

正则表达式常见的4种匹配模式小结

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

匹配重复模式的正则表达式

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《匹配重复模式的正则表达式》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!问题内容我有以下输入文本:pagelimit=50&fi
匹配重复模式的正则表达式
2024-04-04

PostgreSQL模式匹配与正则表达式方法总结

目录1.1 PostgreSQL中的模式匹配和正则表达式1.2 传统SQL的LIKE操作符1.3 SIMILAR TO正则表达式1.4 POSIX正则表达式1.5 模式匹配函数substring总结1.1 PostgreSQL中的模式匹配和
2022-11-19

几种常见攻击的正则表达式

这些正则表达式是一些攻击放过滤使用的,确实不错,喜欢的朋友可以研究下,不要搞破坏啊,仅供研究学习使用
2022-11-15

Python匹配中文的正则表达式

正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别
2022-06-04

正则表达式的匹配规则有哪些

正则表达式的匹配规则有以下几种:1. 字符匹配:使用普通字符来匹配输入的相应字符。2. 通配符匹配:使用特殊字符来匹配任意一个字符。3. 字符类匹配:使用字符类来匹配某个字符集合中的任意一个字符。4. 反向字符类匹配:使用反向字符类来匹配不
2023-09-26

python正则表达式如何实现最小匹配

这篇文章给大家分享的是有关python正则表达式如何实现最小匹配的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最小匹配格式:量词?注:量词有{n,m}、?、+、*用处:在字符串中查找符合正则表达式规则的最短子字符
2023-06-26

Hive中常用正则表达式的运用小结

在实际的应用中,通常需要在一些复杂的、没有规律的字符串中提取数据,这时候就需要用到正则表达式了,这次讲一下hive的正则表达式,感兴趣的朋友跟随小编一起看看吧
2022-11-13

Notepad++使用正则表达式匹配的方法

这篇文章主要介绍了Notepad++使用正则表达式匹配的相关资料,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-15

如何在Python中使用正则表达式进行模式匹配

正则表达式是一种强大的文本匹配工具,可以在Python中使用re模块来进行模式匹配。以下是使用正则表达式进行模式匹配的一般步骤:
如何在Python中使用正则表达式进行模式匹配
2024-02-22

python中的正则表达式,贪婪匹配与非贪婪匹配方式

这篇文章主要介绍了python中的正则表达式,贪婪匹配与非贪婪匹配方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-31

python常用的正则表达式总结

本篇内容介绍了“python常用的正则表达式总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!检验手机号码# 要求:手机号码必须为11位数字
2023-06-02

PHP如何多字节正则表达式匹配的设置字符串和正则表达式

在PHP中使用多字节正则表达式需要设置UTF-8编码字符串,使用标志u(Unicode支持)、i(不区分大小写)、m(多行匹配)和s(点号匹配换行符)。示例:mb_regex_encoding("UTF-8");$pattern="/^こんにちはs+.*$/u";PCRE支持Unicode属性、字符类、边界匹配、多行模式和非贪婪匹配。最佳实践包括设置UTF-8编码、使用Unicode支持标志、考虑使用Unicode属性和字符类,以及利用多行模式和非贪婪匹配。
PHP如何多字节正则表达式匹配的设置字符串和正则表达式
2024-04-02

Java如何多字节正则表达式匹配的设置字符串和正则表达式

摘要:在Java中使用多字节正则表达式时,需要设置字符串和正则表达式:设置字符串:编码为多字节方案(如UTF-8)转义特殊字符设置正则表达式:使用(?u)启用unicode模式使用多字节边界标记(?u)使用字符类(p{L})匹配多字节字符使用转义序列(uD83DuDE0A)匹配特定字符使用非贪婪限定符(*?)限制匹配
Java如何多字节正则表达式匹配的设置字符串和正则表达式
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录