正则表达式中的贪婪模式和非贪婪模式

正则表达式中的贪婪模式和非贪婪模式

    • [一. 贪婪模式(Greedy Mode)](#一. 贪婪模式(Greedy Mode))
    • [二. 非贪婪模式(Non-Greedy Mode)](#二. 非贪婪模式(Non-Greedy Mode))
    • 三.应用场景区别

这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。

作者:神的孩子都在歌唱

一. 贪婪模式(Greedy Mode)

定义 : 贪婪模式是正则表达式的默认匹配模式。在贪婪模式下,量词会尝试匹配尽可能多的字符。贪婪量词包括 *、+、?、{n,m} 等。

示例:

假设我们有以下字符串:

text 复制代码
<a>First</a><a>Second</a>

使用贪婪模式的正则表达式 <a>.*</a> 来匹配 <a> 和 </a> 之间的内容:

python 复制代码
import re

text = "<a>First</a><a>Second</a>"
pattern = re.compile(r"<a>.*</a>")
matches = pattern.findall(text)
print(matches)

输出:

plaintext 复制代码
['<a>First</a><a>Second</a>']

正则表达式 <a>.*</a> 匹配了整个字符串,因为 .* 尽可能多地匹配字符,直到最后一个 </a>。

二. 非贪婪模式(Non-Greedy Mode)

定义: 非贪婪模式也称为懒惰模式(Lazy Mode)。在非贪婪模式下,量词会尝试匹配尽可能少的字符。非贪婪量词通过在贪婪量词后面加上一个问号 ? 来表示,例如 *?、+?、??、{n,m}? 等。

示例

使用非贪婪模式的正则表达式 <a>.*?</a> 来匹配 <a> 和 </a> 之间的内容:

python 复制代码
import re

text = "<a>First</a><a>Second</a>"
pattern = re.compile(r"<a>.*?</a>")
matches = pattern.findall(text)
print(matches)

输出:

plaintext 复制代码
['<a>First</a>', '<a>Second</a>']

正则表达式 <a>.*?</a> 分别匹配了两个 <a> 标签和它们之间的内容,因为 .*? 尽可能少地匹配字符,直到遇到第一个 </a>。

三.应用场景区别

  • 贪婪模式:适用于需要匹配尽可能多内容的情况。
  • 非贪婪模式:适用于需要匹配尽可能少内容的情况,避免过度匹配。

作者:神的孩子都在歌唱

本人博客:https://blog.csdn.net/weixin_46654114

转载说明:务必注明来源,附带本人博客连接。

相关推荐
这个DBA有点耶2 小时前
从症状到根因:数据库监控指标的分层方法与静态/动态阈值策略
数据库·mysql·代码规范
SelectDB2 小时前
时间旅行与快照能力速查:Doris 侧三条落地路径
大数据·数据库·数据分析
SelectDB2 小时前
云数仓成本结构拆解速查:五层计费 vs Doris / 托管形态
大数据·数据库·数据分析
SelectDB2 小时前
什么场景能承接与建议保留:Doris vs Snowflake 边界速查
大数据·数据库·数据分析
ProcessOn4 小时前
纯干货!MySql实战02:一条SQL更新语句执行流程大探索!
sql·mysql·sql server
这个DBA有点耶4 小时前
DELETE没删多少数据,表却越来越大——InnoDB删除空洞与页合并失效的根因
数据库·mysql·代码规范
ly76898 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
小羊没烦恼!8 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
注塑机数据采集联网8 小时前
如何解决注塑机数据采集联网对接MES系统数据WiFi传输数据不稳问题
大数据·数据库·物联网·数据挖掘·数据分析