详解正则表达式的贪婪模式与非贪婪模式

什么是正则表达式的贪婪与非贪婪匹配

  如:String str="abcaxc";

    Patter p="ab*c";

  贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab*c)。

  非贪婪匹配:就是匹配到结果就好,就少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到:abc(ab*c)。

下面通过实例代码看下正则表达式的贪婪模式与非贪婪模式,具体内容如下所示:

贪婪模式:能匹配的最大部分

s = "This is a number 234-235-22-4223"
r = re.match(r"(.+)(\d+-\d+-\d+-\d+",s)
r.groups()
("This is a number 23","4-235-22-4223")

贪婪模式就是“.+”中的+会一直查找到最后一个符合条件的字符,所以上述代码中最前面的两个数字在提取数字是没有被提取到

非贪婪模式:匹配越少越好

s = "This is a number 234-235-22-4223"
r = re.match(r"(.+?)(\d+-\d+-\d+-\d+",s)
r.groups()
("This is a number ","234-235-22-4223")

非贪婪模式就是在“.+?"会匹配到第一个符合条件的字符就停止

总结

以上所述是小编给大家介绍的正则表达式的贪婪模式与非贪婪模式,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

(0)

相关推荐

  • 浅谈php正则表达式中的非贪婪模式匹配的使用

    通常我们会这么写: 复制代码 代码如下: $str = "http://www.baidu/.com?url=www.sina.com/"; preg_match("/http:(.*)com/", $str, $matches); print_r($matches); 结果: 复制代码 代码如下: Array ( [0] => http://www.baidu/.com?url=www.sina.com [1] => //www.baidu/.com?

  • 正则表达式之 贪婪与非贪婪模式详解(概述)

    1 概述 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配.非贪婪模式只被部分NFA引擎所支持. 属于贪婪模式的量词,也叫做匹配优先量词,包括: "{m,n}"."{m,}"."?"."*"和"+". 在一些使用NFA引擎的语言中,在匹配优先量词后加上"?",即变成属于非

  • [正则表达式]贪婪模式与非贪婪模式

    复制代码 代码如下: /**     **   author: site120     **   function : get script part from html document     **/     var loadJs = function(str , delayTime)      {          var delayTime = delayTime || 100;          var regExp_scriptTag = new RegExp("<\\s*sc

  • JS正则表达式学习之贪婪和非贪婪模式实例总结

    本文实例总结了JS正则表达式贪婪和非贪婪模式.分享给大家供大家参考,具体如下: 首先上一段js代码: <script> try{ str="<p>abcdefg</p><p>abcdefghijkl</p>"; re1=str.match(/<p>[\W\w]+?<\/p>/ig); alert("非贪婪模式:\r\n\r\n1:"+re1[0]+"\r\n2:"

  • php正则表达式中的非贪婪模式匹配

    一般情况下,正则表达式的匹配是贪婪模式的,比如下面这个例子: 字符串:....src="http://www.bloghome.cn/1.mp3" type="application/x-mplayer2" .... 要求的结果:http://www.bloghome.cn/1.mp3 如果匹配表达式写为:/src="(.*)"/,则得不到正确的结果,因为最后一个双引号的匹配是贪婪模式的. 解决办法:匹配表达式写为: /src="(.*

  • python中如何使用正则表达式的非贪婪模式示例

    前言 本文主要给大家介绍了关于python使用正则表达式的非贪婪模式的相关内容,分享出来供大家参考学习,下面话不多说了,来一起详细的介绍吧. 在正则表达式里,什么是正则表达式的贪婪与非贪婪匹配 如:String str="abcaxc"; Patter p="ab*c"; 贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配.如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab*c). 非贪婪匹配:就是匹配到结果就好,就少的匹配字符.如上

  • 详解正则表达式的贪婪模式与非贪婪模式

    什么是正则表达式的贪婪与非贪婪匹配 如:String str="abcaxc"; Patter p="ab*c"; 贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配.如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab*c). 非贪婪匹配:就是匹配到结果就好,就少的匹配字符.如上面使用模式p匹配字符串str,结果就是匹配到:abc(ab*c). 下面通过实例代码看下正则表达式的贪婪模式与非贪婪模式,具体内容如下所示: 贪婪模式:能匹配

  • python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析

    本文实例讲述了python 正则表达式贪婪模式与非贪婪模式原理.用法.分享给大家供大家参考,具体如下: 之前未接触过正则表达式,今日看python网络爬虫的源码,里面一行正则表达式匹配的代码初看之下,不是很理解,代码如下: myItems = re.findall('<div.*?class="content".*?title="(.*?)">(.*?)</div>',unicodePage,re.S) ".*?"这种匹配

  • javascript严格模式详解(含严格模式与非严格模式的区别)

    严格模式的优缺点 优点: 提高代码解析与运行速度 禁用一些不合理的语法,减少代码的怪异行为 缺点 某些代码在严格模式下会报错,尤其引入公用与第三方模块的时候需要注意 有些严格模式的特性在不同浏览器的支持情况不同,需要注意兼容问题 严格模式与非严格模式的区别 1.禁用with语法,使用将报错 因为解析with语法时作用域的情况会非常复杂,严重影响代码的解析与运行速度 function usualMode() { with({a: 1}) { console.log(a) } } usalMode(

  • 详解正则表达式 \v 元字符

    下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为: 字符 描述 \ 将下一个字符标记为一个特殊字符.或一个原义字符.或一个 向后引用.或一个八进制转义符.例如,'n' 匹配字符 "n".'\n' 匹配一个换行符.序列 '\\' 匹配 "\" 而 "\(" 则匹配 "(". ^ 匹配输入字符串的开始位置.如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置. $

  • 详解ASP.NET Core3.0 配置的Options模式

    上一章讲到了配置的用法及内部处理机制,对于配置,ASP.NET Core还提供了一种Options模式. 一.Options的使用 上一章有个配置的绑定的例子,可以将配置绑定到一个Theme实例中.也就是在使用对应配置的时候,需要进行一次绑定操作.而Options模式提供了更直接的方式,并且可以通过依赖注入的方式提供配置的读取.下文中称每一条Options配置为Option. 1.简单的不为Option命名的方式 依然采用这个例子,在appsettings.json中存在这样的配置: { "Th

  • 详解model.train()和model.eval()两种模式的原理与用法

    一.两种模式 pytorch可以给我们提供两种方式来切换训练和评估(推断)的模式,分别是:model.train() 和 model.eval(). 一般用法是:在训练开始之前写上 model.trian() ,在测试时写上 model.eval() . 二.功能 1. model.train() 在使用 pytorch 构建神经网络的时候,训练过程中会在程序上方添加一句model.train(),作用是 启用 batch normalization 和 dropout . 如果模型中有BN层(

  • JS中使用正则表达式g模式和非g模式的区别

    先给大家说下js正则表达式中的g到底是什么意思 g是global的缩写啊! 就是匹配全部可匹配结果, 如果你不带g,在正则过程中,字符串是从左至右匹配的,如果匹配成功就不再继续向右匹配了,如果你带g,它会重头到尾的把正确匹配的字符串挑选出来 例如: var str = 'aaaaaaaa' var reg1 = /a/ var reg2 = /a/g str.match(reg1) // 结果为:["a", index: 0, input: "aaaaaaaa"]

  • 实例代码详解正则表达式匹配换行

    在javascript中,使用正则表达式匹配换行可能会遇到各种问题,下面就通过实例介绍一下如何实现此功能. <div id="main"> <div id="left"> </div> <div id="right"> 我们 </div> </div> 如果DIV内没有内容则不换行 把上面的改为: <div id="main"> <div

  • JavaScript正则表达式的贪婪匹配和非贪婪匹配

    所谓贪婪匹配就是匹配重复字符是尽可能多的匹配,比如: "aaaaa".match(/a+/); //["aaaaa", index: 0, input: "aaaaa"] 非贪婪匹配就是尽可能少的匹配,用法就是在量词后面加上一个"?",比如: "aaaaa".match(/a+?/); //["a", index: 0, input: "aaaaa"] 但是非贪婪匹配

  • 详解vue3中渲染函数的非兼容变更

    目录 渲染函数API变更 Render函数参数 渲染函数签名更改 VNode Props 格式化 slot统一 移除$listeners $attrs现在包括class和style 渲染函数API变更 此更改不会影响到<template>用户 h现在全局导入,而非作为参数传递给渲染函数 渲染函数参数更改为在有状态组件和函数组件之间更加一致 vnode现在又一个扁平的prop结构 Render函数参数 // 2.0 渲染函数 export default { render(h) { return

随机推荐