正则表达式最小匹配的写法

计算技术【76】 不在同一个正则表达式,可使用 $ 后边跟一个整数,前面曾经介绍过,在此加深一下理解,我们以字符串中and前后的单词对调为例。/deep.+future/匹配了deep and future love deepfuture。#$1匹配hello!,$2匹配deep,$3匹配and,$4匹配future。1、最小匹配尽可能匹配最短的字符串,在贪婪量词后加上?future/匹配deep and future。pm/){# $name能匹配 $pm 存储的模式串wang。模式串变量存储的模式串的匹配。 阅读详情

假设有这么一串字符:

<p class=MsoNormal style='text-indent:31.5pt'>
    <a name="abc">
        <span lang=EN-US>1.</span>
    </a>
    <span style='font-family:宋体'>负责代码编写</span>
</p>

<p class=MsoNormal style='text-indent:31.5pt'>
    <a name="def">
        <span lang=EN-US>2.</span>
    </a>
    <span style='font-family:宋体'>负责单元测试;</span>
</p>  

<p class=MsoNormal style='text-indent:31.5pt'>
    <a name="ghi">
        <span lang=EN-US>3.</span>
    </a>
    <span style='font-family:宋体'>完成上级领导交办的其它任务。</span>
</p>

知道<a name="ghi">,如何编写正则表达式查找出父节点?

<p class=MsoNormal style='text-indent:31.5pt'>
    <a name="ghi">
        <span lang=EN-US>3.</span>
    </a>
    <span style='font-family:宋体'>完成上级领导交办的其它任务。</span>
</p>

刚开始的时候,这样写:

<p[\s\S]*?<a name="ghi"[\s\S]*?</p>

却拿到了全文。参考正则表达式30分钟入门教程:
http://deerchao.net/tutorials/regex/regex.htm
“贪婪与懒惰”章节说了这样的一个案例: a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabac的话,它会匹配aab而不是ab,因为正则表达式有另一条规则,比懒惰/贪婪规则的优先级更高:最先开始的匹配拥有最高的优先权——The match that begins earliest wins。
要想只拿到匹配的,可以这样写:

<p[^>]*?>[^<]*?<a name="ghi"[\s\S]*?</p>

表示的意思:匹配

<p

开头的,紧接着任意个不是>的字符,这些字符越少越好,直到遇到>字符,然后紧接着任意个不是<的字符,这些字符越少越好,直到遇到

<a name="ghi"

然后紧接着是任意个字符,这些字符越少越好,直到遇到

</p>

为止,循环查找符合上述条件的字符串。

原文来自http://www.iteye.com/problems/98084,经过整理。

21、正则表达式匹配引擎:贪婪量词与匹配机制解析 本文详细解析了正则表达式匹配引擎中贪婪量词的工作机制,探讨了NFA(非确定性有限自动机)和DFA(确定性有限自动机)两种主要引擎的匹配原理及其差异。文章通过具体示例说明了贪婪匹配的特点及可能导致的问题,并深入分析了回溯机制在NFA引擎中的实现过程。此外,还比较了不同引擎对正则表达式编写的影响,帮助读者根据实际需求选择合适的引擎和写法,以提升匹配效率和准确性。 阅读详情

相关推荐

JavaScript正则表达式实战:非空白字符及长度限制匹配

正则表达式是处理字符串的强大工具,它定义了一种文本模式用于匹配一组字符串。在IT领域,正则表达式广泛应用于文本处理和数据验证中,从简单的搜索和替换,到复杂的数据解析和验证,都可以看到它的身影。正则表达式是由一系列字符和操作符构成的模式,能够匹配特定的字符组合。比如,表达式/^\d+$/可以匹配一个或多个连续的数字字符。其中,和分别代表字符串的开始和结束,\d代表数字字符,表示前面的元素可以出现一次或多次。

weixin_29069575的博客 810

正则表达式之最短匹配

贪婪与懒惰当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。考虑这个表达式:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?...

zcc_0015的专栏 2万+

同花顺自动化交易避坑指南:pywinauto实战中验证码识别与界面弹窗处理

本文深入探讨同花顺自动化交易中的关键稳定性问题,重点解决验证码识别与弹窗处理两大难题。通过优化Tesseract OCR、整合打码平台API以及设计pywinauto弹窗监控体系,提供了一套完整的自动化交易解决方案,帮助交易者有效规避资金账户和持仓信息操作中的常见陷阱。

weixin_33734785的博客 488

正则表达式-组合-最短匹配

最短匹配

代码小哥的博客 2579

STM32F4实战:手把手教你实现USB OTG双模式切换(Host/Slave)

本文详细介绍了如何在STM32F4上实现USB OTG双模式切换(Host/Slave),包括硬件架构解析、软件实现机制、主机模式下的U盘读写以及从机模式下的自定义设备开发。通过实战案例和优化技巧,帮助开发者快速掌握USB双角色功能,提升嵌入式系统开发的灵活性和效率。

u9v0w的博客 730

OpenVPN 新增 windows 客户端

虚拟私人网络(Virtual Private Network,简称VPN)是一种网络技术,它允许用户通过公共网络(如互联网)建立一个安全的连接通道。本文介绍如何添加 windows 客户端。

利昂的技术存档 3769

正则表达式贪婪匹配和最小匹配

正则表达式匹配的结果默认输出的是最长的字符串。(贪婪匹配) 若要得到长度最小的字符串,应该修改正则表达式,当遇到[*,+,?,{m,n}]四个操作符时,需要加入最小匹配操作符。 最小匹配操作符 操作符 说明 *? 前一个字符0次或无限次扩展,最小匹配 +? 前一个字符1次或无限次扩展,最小匹配 ?? 前一个字符扩展0次或一次,最小匹配 {m,n}? 扩展前一个字母m至n次(含n),最小匹配 验证一下:上一个...

m0_45338067的博客 4733

审稿人看了直呼内行:多组学整合分析——科研小白进阶之路

多组学,多平台分析解决方案

pysonger的博客 3944

正则表达式三种匹配模式:贪婪模式,勉强模式,占有模式的区别

正则表达式一共有三种模式:贪婪模式、勉强模式、侵占模式。 我在做项目的时候,曾领教过正则“回溯陷阱”的厉害,所以,今天做个总结下正则常见的两种模式的区别: 【贪婪模式】:正则表达式一般趋向于最大长度匹配,总是尝试匹配尽可能多的字符,也就是所谓的贪婪匹配; 【勉强模式】:又叫"勉强模式",属于最小长度匹配,就是匹配到结果就好,总是尝试匹配尽可能少的字符; 【占有模式】:又叫"勉强模式",属于...

Java Punk 2538

YOLOv13必学核心:SKAttention选择性核注意力机制原理 + 实战全拆解

SKAttention的核心思想来源于人类视觉系统的一个重要特性:根据不同的视觉刺激,人眼能够自适应地调整感受野大小。SKAttention将这一生物学原理转化为深度学习中的注意力机制,通过动态选择和融合不同大小的卷积核,实现了自适应的多尺度特征提取。在人类视觉皮层中,不同的神经元具有不同大小的感受野,而且这些感受野的大小会根据视觉刺激的类型动态调整。本文将深入解析SKAttention模块的设计原理、数学基础、实现细节,以及其在YOLOv13目标检测框架中的集成应用,为读者提供全面而深入的技术理解。

FJN110的博客 97

干掉百度Apollo的安装!(Apollo10.0的源码安装)

1、在Apollo10.0的安装手册中,没有再详细给出源码安装的步骤,官方更推荐的是包管理安装,但实际上Apollo10.0仍然是可以进行源码安装的。2、使用源码安装Apollo10.0,比Apollo9.0的源码安装问题要少,整个安装过程更顺畅。3、从Apollo 10.0开始,源码安装和包管理安装采用同一套编译工具,也就是aem。之前只有在进行包管理安装的时候我们才需要安装aem,现在进行源码安装也需要安装aem。

qq_40033030的博客 893

Java & regex(2-3)

Java & regex(2-3)§5 连接核心3点是rs表达式。这个连接运算,再说就似乎太罗索了。把单字符顺着写就形成了一条字符线,一个字符接着一个字符。在Java中,有字符串String、字符序列(CharSequence),虽然都是一根绳子,但它们不是一个东西——String是类、CharSequence是接口。ok,我们不讨论Java的API。这里要注意的是, 在使用连接运

yqj2065的博客 2171

Python爬虫实战:Boss直聘职位数据采集实战 - Playwright + 结构化解析完整方案(附CSV导出 + SQLite持久化存储)!

我长期专注 Python 爬虫工程化实战,主理专栏 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 2188

正则表达式(一):位置匹配及重复匹配

无论是编程语言,比如Python,还是SQL,比如Hive和MySQL都提供了正则表达式用于数据及文本字符串的过滤和匹配。正则表达式不是一种完备的程序设计语言。但在绝大多数的软件产品、编程语言、实用工具和开发环境中,正则表达式都已经被实现。正则表达式的使用方法和具体功能在不同的应用程序和语言中各不相同。具体在使用时,还需要具体去查手册。 1.原理 正则表达式的底层原理是两类自动机:确定型有穷自...

读万卷书 行万里路 4175

零基础学习CANoe Panel(5)——改变变量的值,控件图像也改变,这是怎么回事?

Panel 中控件的图像随着值变化,是怎么回事?

蚂蚁小兵 2145

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Python进阶 - 正则表达式的贪婪匹配与非贪婪匹配

本文深入解析了Python正则表达式中贪婪匹配与非贪婪匹配的核心概念,通过实际代码示例和可视化图表展示了二者的关键区别。贪婪匹配会尽可能多地匹配字符(如.*),而非贪婪匹配(.*?)则尽可能少匹配。文章演示了在HTML标签提取、日志分析和嵌套表达式解析等场景中的应用,指出贪婪匹配的常见陷阱(如跨标签错误匹配),并提供非贪婪匹配的正确解决方案。最后强调根据具体需求选择合适的匹配模式,推荐结合re.DOTALL等标志处理复杂文本,并建议使用在线工具测试正则表达式。这篇技术指南帮助开发者精准掌握正则匹配策略,提升

千淘万漉虽辛苦,吹尽狂沙始到金 9857

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【正则表达式】操作符_方法_match对象及其属性_贪婪匹配和最小匹配方法

作用:用简洁的符号表示一组字符串 正则表达式(Regular Expression 或 Regex),是用于定义某种特定搜索模式的字符组合。正则表达式可用于匹配、查找和替换文本中的字符,进行输入数据的验证,查找英文单词的拼写错误等。 用法: 1.常用操作符 实例: 匹配Ip地址的正则表达式 在代码中是怎样编译运行的呢? IDE中的写法 2.正则表达式的表示类型 在使用正则表达式时,最好使用raw string,方法是在字符串前加一个r 因为出现转义字符斜杆 \ 时,string类型就需要多

Johnny_sc的博客 629

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

正则表达式从后向前匹配_Python核心知识系列:正则表达式与JSON

1 正则表达式必知必会1.1 简介正则表达式:是一些用来匹配和处理文本的字符串。正则表达式的使用场景主要以下两种情况:一是查找特定的信息(搜索),二是查找并编辑特定的信息(替换)。用模式(pattern)表示实际的正则表达式。1.2 匹配单个字符匹配普通文本:正则表达式为待匹配的文本。匹配任意字符:.字符(英文句号)可以匹配任意单个字符,如字符、字母、数字,甚至是.字符本身。匹配特殊字符:使用转义...

weixin_26766909的博客 1万+

js正则匹配闭合标签_一问读懂正则表达式(以匹配HTML为例)

  工作中,正则表达式用的可能不是很多,一般使用的时候网上都有现成的实例,很少缺乏比较全面的理解。本文主要以匹配HTML标签为例,简述下正则表达式常用的功能点。匹配HTML片段如下:let str = `<div id="app"><div>21</div> <h1> <span>hello</span...

weixin_31080717的博客 1644

golang正则表达式写法

首先讲正则表达式 然后分析golang中regexp包的用法

SMonkeyKing的博客 2205

正则表达式--递归匹配、非贪婪匹配与分组替换

正则表达式--递归匹配、非贪婪匹配与分组替换1. 表达式的递归匹配有时候,我们需要用正则表达式来分析一个计算式中的括号配对情况。比如, 使用表达式 "/( [^)]* /)" 或者 "/( .*? /)" 可以匹配一对小括号。但是如果括号 内还嵌有一层括号的话 ,如 "( ( ) )",则这种写法将不能够匹配正确,得到的结果是 "( ( )" 。类似情况的还有 HTML 中

爱飞的蒲公英 2177

正则表达式话题2--递归和匹配

1. 表达式的递归匹配 有时候,我们需要用正则表达式来分析一个计算式中的括号配对情况。比如,使用表达式 "\( [^)]* \)" 或者 "\( .*? \)" 可以

sumiaizi的专栏 596

正则表达式常用匹配

正则表达式常用匹配符号和方法及其解析,讲述的贪心和非贪心2种匹配方式,本文用python实现。

bo602505401的博客 1171
上一篇: Dagger2的使用之说得最清楚的一篇
下一篇: 判断明天是不是本月最后一个星期六
ithouse
博客等级 码龄12年 200粉丝 212原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值