正则表达式贪婪模式与懒惰模式

 

正则表达式贪婪匹配模式,对于初学者,往往也很容易出错。有时候需要匹配一个段代码内容,发现匹配与想要不一致。发现原来,跟贪婪模式有关系。如下,我们看下例子:

什么是贪婪模式

字符串有: “<h3>abd</h3><h3>bcd</h3>”,我们想匹配<h3>…</h3>内容,正则表达式如下:

1、h3开头与结尾,”<h3>待添加</h3>” <h3></h3>都作为普通字符

2、中间可以出现任意字符,个数可以是0个或者多个,正则表达式可以用:.* ,“.”代表任意字符,默认模式不匹配换行,”*” 重复前面字符0个或者多个。

3、最终我们考虑结果将是:”<h3>.*</h3>” ,也可以是:”<h3>.{0,}</h3>” {}代表,重复前面指定个数字符,以下用到是,正则表达式调试工具截图,软件可以看:正则表达式工具推荐(学习工具、测试工具)

 

2种结果都一样,这是我们不希望得到的,我们希望从左边开始,第一个出现</h3>,就开始匹配。以上这种模式,是贪婪模式,也是正则表达式默认以这个方法匹配。表示重复字符,操作符,默认都是贪婪模式,如:.*,.+,.{1,},.{0,} 都会匹配最大长度字符。正则表达式元字符,量词默认首先最大匹配字符串,这些量词有:+,*,?,{m,n} 。一开始匹配,就直接匹配到最长字符串。

什么是懒惰模式

既然上面几种,表示字符重复个数,元字符默认都是贪婪模式。如果,我们需要最小长度匹配,也就是懒惰模式,怎么样写正则表达式呢?其实,正则表达式里面通用方法是,在表示重复字符元字符,后面加多一个”?”字符即可。上面正则表达式可以写成:”<h3>.*?</h3>”,或者”<h3>.{0,}?</h3>” 都可以。

 

懒惰模式,就匹配到我们需要字符串了。

总结

正则表达式,表示字符串重复个数元字符,'?,+,*,{}' 默认都会选择贪婪模式,会最大长度匹配字符串,而要切换到懒惰模式,就只是在该元字符,后面加多一个”?” 即可切换到非贪婪模式(懒惰模式)。

转载于:https://www.cnblogs.com/Jian-Zhang/p/6126356.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stm32 薄膜键盘原理_市面上的笔记本键盘优缺点解析,看完秒懂

大家在选购电脑时&#xff0c;很多人的关注重点都是笔记本的配置好不好、外观设计酷不酷和电池续航能力强不强&#xff0c;对电脑键盘往往不会太在意&#xff0c;其实一个好的电脑键盘也可以帮助你提高工作效率&#xff0c;特别对于小编这样的文字工作者&#xff0c;如果键盘手…

计算机等级考试心得体会,计算机等级考试心得体会(2)

估计以后的考试也可能略有变化&#xff0c;即逐渐增加使用命令的条数。由于该内容变化小&#xff0c;考生应当练习到纯熟的境地&#xff0c;在考试时用尽可能少的时间来做这部分内容&#xff0c;以使其他内容有更多的时间。六题能做出五题即可&#xff0c;有一题一时想不起&…

Web开发框架–第1部分:选项和标准

在我的公司&#xff0c;我们正在评估未来几年将使用哪种Web开发框架。 自上次评估以来&#xff0c;我们一直在使用由Struts 2驱动的Java应用服务器作为MVC&#xff0c;将Tiles作为模板引擎&#xff0c;将jQuery用于Javascript awesomennes&#xff0c;将DWR用于AJAX调用&#x…

增加一个类的功能可以采用继承或者代理模式或者装饰者模式

增加一个类的功能有3种办法&#xff1a; 1.继承 2.代理模式 3.装饰者模式转载于:https://www.cnblogs.com/panxuejun/p/6127837.html

dell增强保护套装还原失效_汕头长安欧尚汽车音响改装升级,还原真实音色

今天给大家分享的是汕头车韵汽车音响改装店开业以来&#xff0c;升级改装的第113辆长安汽车。长安欧尚x7外观设计十分出彩&#xff0c;整体造型动感十足&#xff0c;前脸采用六边形大尺寸的前格栅&#xff0c;并加入了“云鹰之翼”的设计元素&#xff0c;造型十分具有攻击性&am…

POJ 2386 Lake Counting

链接&#xff1a;http://poj.org/problem?id2386 Lake Counting Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 24263 Accepted: 12246Description Due to recent rains, water has pooled in various places in Farmer Johns field, which is represented by a…

计算机窗口颜色不能自定义,用RBG颜色设置自定义颜色

这个是Mac自带的测色计快捷键shift command c即可复制RBG格式的颜色#DD0000 这个是csdn 的logo里的红色我们得到的是十六位颜色代码但是UIColor()只有这几种初始化方式init(white: CGFloat, alpha: CGFloat)init(hue: CGFloat, saturation: CGFloat, brightness: CGFloat, al…

http协议和浏览器缓存问题

HTTP是超文本传输协议。 HTTP是一个应用层协议&#xff0c;由请求和响应构成&#xff0c;是一个标准的客户端服务器模型。HTTP是一个无状态的协议。 转载于:https://www.cnblogs.com/hodgson/p/6128003.html

Spring3国际化和本地化

我最近想将Spring 3提供的国际化和本地化功能添加到我当前的项目之一中。 我浏览了Spring文档&#xff0c;然后在Internet上搜索以找到一些资源。 但是我找不到能够满足客户要求的资源。 大多数教程都像hello world应用程序&#xff0c;它提供了基本的理解。 即使是spring文档&…

h3c交换机 查看二层交换机端口ip_【分享】项目中如何选到称心如意的交换机?...

项目中如何选择交换机&#xff1f;这七个步骤不能少如何选择交换机&#xff1f;如何根据项目确定网络结构&#xff1f;我们在做大部分项目都有这样的疑问&#xff0c;交换机做为弱电中最常用的设备之一&#xff0c;关于他的使用与选择&#xff0c;不得不知&#xff0c;本期我们…

SSH中一些典型的问题

struts2 1-1&#xff1a;为什么每次请求都要创建一个Action对象&#xff1f; 是出于对线程安全的考虑&#xff0c;每个request都不会相互影响 1-2&#xff1a;ModelDriven拦截器的配置中refreshModelBeforeResult解决了什么问题&#xff1f; 先把旧的model对象从ValueStack…

为什么计算机连接不上打印机,为什么电脑连接打印机后却没反应

2013-12-12我的笔记本怎么连接不了打印机 显示是这样的好&#xff1a;以下方法供您参考&#xff1a;看一下您的系统服务中这两个(最上面 和最下面的是不是没启用)总之是您的局域网连接没有连接上&#xff0c;要不在网上邻居里您会看到其他的机器的&#xff0c;这是搜到的解决的…

JavaFX 2.0布局窗格– BorderPane

BorderPane非常适合开发更复杂的布局。 通常&#xff0c; BorderPane提供五个不同的区域&#xff1a;顶部&#xff0c;右侧&#xff0c;底部&#xff0c;左侧和中央。 您可以通过调用setTop/setBottom/set…方法将Node设置到每个区域。 这种方法使开发“类似于网站”的应用程序…

页面排版简单样式

页面排版简单样式demo <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml" xml:lang"zh-cn"> &l…

JavaWeb基础(jsp初识)

jsp, java server page jsp页面是在服务器上运行的一个页面 动态网页 与后台有数据交互的页面 与其他语言的区别: jsp 使用java语言进行开发, 安全性高, 适合大型项目, 企业级的文本应用分布式项目, 服务器集群, hadoop asp.net 使用c#, .Net平台, 简单易用, 因为不开源, 所以安…

nao机器人拆解_一些机器人硬件网站

以前收集过一些网站&#xff0c;偏机器人机械结构、硬件、参数(也有模拟或算法)。在 https://www.zhihu.com/question/19826366 也夹杂着一些网址&#xff0c;但是有些网址没有深入的内容&#xff0c;排版也不好&#xff0c;所以 在这里编辑成一个列表&#xff0c;方便归档。欢…

心电图是模拟计算机吗,心电图仪

心电图仪是由威廉爱因托芬(W. Einthoven,1860-1927)发明的。 什么是心电图仪(机)M311986 心电图仪能将心脏活动时心肌激动产生的生物电信号(心电信号)自动记录下来&#xff0c;为临床诊断和科研常用的医疗电子仪器。国内一般按照记录器输出道数划分为&#xff1a;单道、三道、六…

从Java 8启动项目拼图?

在马克雷因霍尔德 &#xff08; Mark Reinhold &#xff09;在他的《 项目拼图&#xff1a;火车晚点 》一文中提出“将项目拼图推迟到Java 9的下一个发行版中”。 他解释了这样做的原因&#xff1a;“仍然存在一些重大的技术挑战”&#xff0c;并且“没有足够的时间来进行广泛的…

ChannelOption用到的socket的标准参数

ChannelOption.SO_BACKLOG, 1024 BACKLOG用于构造服务端套接字ServerSocket对象&#xff0c;标识当服务器请求处理线程全满时&#xff0c;用于临时存放已完成三次握手的请求的队列的最大长度。如果未设置或所设置的值小于1&#xff0c;Java将使用默认值50。 ChannelOption.SO_K…

cbrt c语音_isgraph - [ C语言中文开发手册 ] - 在线原生手册 - php中文网

在头文件中定义int isgraph(int ch);检查给定字符是否具有图形表示形式&#xff0c;即它是数字(0123456789)&#xff0c;大写字母(ABCDEFGHIJKLMNOPQRSTUVWXYZ)&#xff0c;小写字母(abcdefghijklmnopqrstuvwxyz)或标点符号(!"#$%&()*,-./:;<>?[\]^_{|}~)或特定…