问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

正则表达式 懒匹配遇到问题

发布网友 发布时间:2022-04-23 05:22

我来回答

2个回答

懂视网 时间:2022-04-23 09:44

这次给大家带来正则的惰性匹配模式(?)使用详解,正则惰性匹配模式(?)使用的注意事项有哪些,下面就是实战案例,一起来看一下。

正则表达式惰性匹配模式:
在贪婪匹配模式一章节已经说过人性是贪婪的,希望获得更多的金钱、地位甚至美女,但是也有很多清心寡欲的人,只要满足基本的生活需求就可以了,在正则表达式中也有这样的匹配原则,下面就进行一下介绍。

一.惰性模式的概念:

此模式和贪婪模式恰好相反,它尽可能少的匹配字符以满足正则表达式即可,例如:

var str="axxyyzbdkb"; 
console.log(str.match(/a.*b/));

以上代码是贪婪模式,于是能够匹配整个字符串,下面将其修改成惰性匹配模式:

var str="axxyyzbdkb"; 
console.log(str.match(/a.*?b/));

上面的代码即是惰性匹配,方法就是在重复量词后面加一个问号(?)即可。
惰性匹配模式是尽可能少的匹配字符,但是必须要满足正则表达式的匹配规则,例如上面的代码,*可以重复匹配0个或者多个前面的字符或者子表达式,但是正则表达式的结尾必须是b,所以正则表达式可以匹配上面字符串中的axxyyzb。

总结如下:

1.在重复量词后面添加问号(?)即可形成惰性匹配。
2.惰性匹配会尽可能少的匹配字符,但是必须要满足整个匹配模式。

二.惰性限定符列表:

语法结构语义解释
*?可以重复任意次,但是尽可能重复少的次数。
+?可以重复1次或者任意多次,但是尽可能重复少的次数,不过最少次数是1。
??可以重复0次或1次,但尽可能少重复。
{n,m}?可以重复n到m此,但尽可能少重复,最少匹配次数是n。
{n,}?可以重复n次以上,但尽可能少重复,最少匹配n此。

首先引入一个介绍比较详细的网站

http://www.gxlcms.com/article/31491.htm

接下来是本人的简介

其实贪婪和惰性很容易理解,从字面意思我们就可以知道,所谓的"贪婪"的意思就是,如果符合要求就一直往后匹配,一直到无法匹配为止,这就是贪婪模式。所谓的惰性模式就是一旦匹配到合适的就结束,不在继续匹配下去了,下面我介绍几个例子来主要讲述一下。

首先讲述一下贪婪模式的标示符:+,?,*,{n},{n,},{n,m}.惰性模式:+?,??,*??,{n}?,{n,}?,{n,m}?;

例子一

var pattern=/8[a-zA-Z0-9]*7/;贪婪模式
var string="abc8defghij7klngon8qrstwxy7";

这时使用了贪婪模式*,表示8与8之间可有有任意多个字母,那这个正则先匹配第一个8,如果匹配到了后,就无限制的匹配后面的内容,只要后面的内容都满足[a-zA-Z0-9]就可以。一直匹配,匹配到不能再匹配为止,看紧接着后面的一个是不是7,如果不是那他就往前进一个(吐出一个看是不是7),如果不是再继续吐直到吐出7为止,然后匹配到的就是这之间的内容。所以结果匹配到的内容就是整条字符串。

var pattern=/8[a-zA-Z0-9]*?7/ig;惰性模式
var string="abc8defghij7klngon8qrstwxy7";

上面正则使用了惰性模式*?,此时匹配方式是这样的,先匹配一个8,然后在往后匹配一个字符看是不是符合[a-zA-Z0-9],如果符合,再去看紧接着后面的一个字符是不是7,如果是7就结束,如果不是就再往后匹配一个字符,看是不是符合[a-zA-Z0-9],如果符合,就再看紧接着后面的一个字符是不是7,如果是7就结束,否则,按照上面的方式依次循环下去,指导符合为止。

(2).贪婪和惰性模式还可以用另一种方式来表达。

例子二

var test="<img src="aaa/111.jpg"/><img src="aaa/112.jpg"/><img src="aaa/113.jpg"/>";
var pattern=/<img [^>]*/>/ig;

这样也可以实现惰性模式,[^>]这个表示的就是在<img到/>之间不能出现>,所以结果可以找寻每个<img>标签。

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

js里的正则实现数字每隔四位用空格分隔效果

在PHP里使用正则的效率 贪婪、非贪婪与回溯详解(附代码)

热心网友 时间:2022-04-23 06:52

懒匹配(非贪婪模式),不会影响正则中的前半部分,只影响后半部分。举例:
文本:<div>test1</div>bb<div>test2</div>
正则表达式:<div>(.*?)</div> <div>是前半部分,</div>是后半部分
匹配原理:前半部分先匹配【始终是文本的第一个<div>】,再查找尽可能少的字符,后面接着是能够匹配后半部分。所以捕获始终是test1而不是test2【除非下一次匹配】
如果末尾再加上*:
文本:<div>test1</div>bb<div>test2</div> AAA
正则表达式:<div>(.*?)</div>AAA
那么匹配结果是整个文本,不会匹配<div>test2</div> AAA
由于文本中第一个<div>已经匹配了正则前半部分(匹配start的位置暂时不变),它会往后尝试,直到找到一个匹配end位置,只有尝试到字符串结尾仍然找不到匹配时start位置才会移动。

如果想要匹配 a.. a..... a.. ..c33,开始匹配位置从最后一个a开始,可以用:
正则表达式a([^a]*?)c33
如果不是单个字符,可以使用:
ab(?!.*ab)(.*?)c33
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苏打地牢500层boss怎么打 苏打地牢500层boss打法攻略 隐形眼镜用水龙头水泡着可以么 ...还有些痒痒的 越来越多的趋势 请问这是什么原因引起的 长安univ智电idd改无线充怎么改的 山药泥火龙果的做法 铜合金好还是纯铜好 铜合金和铜哪个好 合金为什么比铜要好 合金和铜哪个好 音乐风格要素主要包括 奶牛选配要注意哪些问题? 美图秀秀文件不能删除 如何选择繁殖母牛 同时3.6G的CPU要双核好还是INTEL好? G41主板 3.6至强CPU 好吗? 电脑cpu3.6ghz够用吗 dellcpu3.6和dellcpu3.301哪个好 笔记本cpu3.6ghz好吗,4核 CPU I7 4790主频是3.6但主板能调到4.0g? CPU主频是3.6 ,待机时是2.1GH,为什么我玩绝地求生时候还是2.1,鲁大师测试时候4.0就很正常 塞尔达传说荒野之息大象获得的技能如何使用? 英特尔至强3.6 CPU 是多少纳米的,这CPU怎么样,能带的起3的网游吗 英特尔3.6GHZ的单核cpu要配什么样的电脑配置 铁观音秋茶好还是春茶好 电脑cpu速度3.7gh好还是3.6 为什么电脑cpu有3.6ghz只显示3.59hz? cpu最高3.6hz是什么意思 AMD的CPU3.6GH双核和3.4GH三核那个好 至强XEON 3.6这个CPU性能怎么样? 铁观音,到底春茶好还是秋茶好 php惰性匹配 场外个股期权可以做吗,风险高吗 场外股票期权的风险点在哪里? 场外期权的风险到底在哪儿 场外股票期权的政策风险? 场外个股期权的风险有多大 为什么网上那么多做场外股票期权的,是正规合法的吗 快手极速版怎么换个提现? 快手极速版绑定的现在不用了,如何更换其他的微信 一个人可以注册几个? 正则表达式 “!\\^\\.\\*\\$!([^!]+)!” 是什么意思? 注册上限5个是什么意思 个人,订阅号,公众号的好友上限分别是多少? 你知道一个可以注册几个企业? 杭州兴源压滤机液压站工作原理 一个最多能加多少个好友? 压滤机小车只能取板但不能拉板是什么故障 一个普通好友数量上限是多少 一个最多可以加多少好友了。 如何成立信托每个月给受益人2w