`

正则表达式中量词的贪婪算法

阅读更多

      今天研究了正则表达式的贪婪算法,量词的贪婪性是在量词的三大算法(贪婪,惰性,支配)中最实用也是最难理解的一种算法,下面我们举例将它说清楚。

定义:

A greedy quantifier starts by looking at the entire string for a match. If no match is found, it eliminates the last character in the string and tries again. If a match is still not found, the last character is again discarded and the process repeats until a match is found or the string is left with no characters. All the quantifiers discussed to this point have been greedy.

 

实例:

  1. var str1 = "abbbaabbbaaabbb1234";
    var reg1 = /.*bbb/g;
    document.write(str1.match(reg1));
    document.write("<br/>");

     结果:abbbaabbbaaabbb

  2. var str2 = "zewsdf skyyy flyok156sky skyy skyyyy";
    var reg2 = /sky*/g;
    document.write(str2.match(reg2));
    document.write("<br/>");

     结果:skyyy,sky,skyy,skyyyy

  3. var str3 = "yyyyyyyyyyyyy";
    var reg3 = /yy*/g;
    document.write(str3.match(reg3));

     结果:yyyyyyyyyyyyy

  4. var str4 = "yyyyyykyyyyy";
    var reg4 = /yy*/g;
    document.write(str4.match(reg4));

     结果:yyyyyy,yyyyy

总结:

大家仔细观察上面的例子和输出结果不难看出,贪婪算法是这样的:首先会按照正则表达式制定的匹配顺序进行匹配直到发现一个量词,这个时候贪婪算法会先取整个串看是否符合包括量词在内的整个正则表达式的匹配情况,如果满足砍掉匹配上的子串,在剩下的子串中再找是否有符合的情况,如有取出,没有结束。一直递归下去,直到找到所有的匹配情况或没有任何匹配的时候结束匹配。
 

分享到:
评论

相关推荐

    Python正则表达式标准库使用教程.pdf

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整...如果表达式中有量词或边界,这个过程会稍微有一些不同,但也是很好理解的,看下图中的示例以及自己多使用几次就能明白。

    精通正则表达式~~~

    精通正则表达式第三版 搜集于网络 前言..........I 第1章:正则表达式入门.... 1 解决实际问题... 2 作为编程语言的正则表达式... 4 以文件名做类比... 4 以语言做类比... 5 正则表达式的知识框架... 6 对于...

    正则表达式中包含三种元素分别为:量词、元字符、修饰符正则表达式中包含三种元素分别为:量词、元字符、修饰符

    正则表达式中包含三种元素分别为:量词、元字符、修饰符正则表达式中包含三种元素分别为,这是常用的很有用

    [精通正则表达式(第三版)]

    第 1 章 正则表达式入门 29 解决实际问题 30 作为编程语言的正则表达式 32 以文件名做类比 32 以语言做类比 33 正则表达式的思维框架 34 对于有部分经验的读者 34 Egrep元字符 36 行的起始和结束 36 字符组...

    python正则表达式及使用正则表达式的例子

    依次拿出表达式和文本中的字符串进行比价 如果每个字符都能匹配,则匹配成功;一旦有匹配不成功的字符,则匹配失败 如果有量词和边界,则匹配过程稍微有些不同 正则表达式语法规则 语法 说明 表达式...

    正则表达式教程之模式修正符使用介绍

    之前我们给大家介绍了正则表达式中的定界符、原子和元字符,那么我们关于正则表达式教程的基本语法就剩下了正则表达式中的模式修正符。本节会向大家介绍模式修正符的概念、模式修正符的构成,以及结合实例的模式修正...

    PHP 正则表达式效率 贪婪、非贪婪与回溯分析(推荐)

    先扫盲一下什么是正则表达式的贪婪,什么是非贪婪?或者说什么是匹配优先量词,什么是忽略优先量词,好吧,下面通过实例给大家介绍下PHP 正则表达式效率 贪婪、非贪婪与回溯分析,一起看看吧

    .NET正则表达式基础教程代码

    .NET正则表达式基础使用教程。该文件为Visual Studio 2013项目文件。里面有4个小项目,分别用于介绍正则表达式的字符组,量词,分组,断言。具体请参考我即将推出的博客教程。谢谢各位。

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

    1 概述 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的... 从正则语法的角度来讲,被匹配优先量词修饰的子表达式使用的就是贪婪模式,如“(Expression)+

    正则表达式、分组、子匹配(子模式)、非捕获子匹配(子模式)

    前面我们知道正则表达式有很多元字符表示匹配次数(量词),都是可以重复匹配前面出现的单个字符次数。有时候,我们可能需要匹配一组多个字符一起出现的次数。这个时候,我们需要分组了。就是用小括号来括起这些字符...

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

    非贪婪匹配就是尽可能少的匹配,用法就是在量词后面加上一个“?”,比如: "aaaaa".match(/a+?/); //["a", index: 0, input: "aaaaa"] 但是非贪婪匹配有时候和我们期待的并不一样,比如: "aaab".match(/a+b/); ...

    正则表达式分组实例详解

    正则表达式分组: 如果想匹配3个数字,正则表达式可以用如下写法: \d{3} 以上代码使用重复量词可以匹配3位数字。 但是在实际应用中,往往需要重复多个字符,例如我想重复ab两个字符,使用以下代码就不合适了,代码...

    PHP和正则表达式教程集合之二第1/2页

    正则表达式快速入门(二) 【导读】在本文里,我们主要介绍子模式(subpatterns),逆向引用(Back references)和量词(quantifiers) 在上篇文章里,我们介绍了正则表达式的模式修正符与元字符,细心的读者也许会发现,...

    Python 正则表达式完整示例教程

    文章目录正则表达式元字符基本元字符:预定义字符使用量词贪婪量词字符分组反向引用分组非捕获分组re模块介绍search()和match()函数match对象的方法findall()和finditer()字符串分割和替换编译正则表达式 正则表达式...

    正则表达式{n,m}量词(至少n次,最多m次)

    正则表达式{n,m}量词: {n,m}量词可以重复前面匹配的字符n-m次,至少n次,最多m次。 语法结构: 构造函数方式: new RegExp("x{n,m}") 对象直接量方式: /x{n,m}/ 浏览器支持: IE浏览器支持此元字符。 火狐浏览器支持...

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

    贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,下面这篇文章主要给大家介绍了关于python中如何使用正则表达式的非贪婪模式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习具有一定的参考学习...

    正则表达式教程

    本教程主要参考自网上最普遍的《正则表达式30分钟入门教程》(http://deerchao.net/tutorials/regex/regex.htm),这是一个非常优秀的教程,深入浅出讲解了正则表达式的基本概念,更加深入的内容可以参考CSDN上过客...

    javascript 进阶篇1 正则表达式,cookie管理,userData

    首先,什么事正则表达式呢,其实引入概念很多时候并不能帮我们明白它到底是什么,所以我先简单描述下,正则表达式,其实就是一个记录字符串规则则的字符串,等我们看完这一部分,也就能明白它到底是什么了。...

    编写高质量的js之正确理解正则表达式回溯

    如果遇到分支(通过|操作符),那么正则表达式必须从这些选项中选择一个进行尝试。 当正则表达式做出这样的决定时,如果有必要,它会记住另一个选项,以备返回后使用。如果所选方案匹配成功,正则表达式将继续扫描...

    正则表达式

    正则表达式中包含两种元素分别为:量词、元字符,是java,html,java web学习的资料。

Global site tag (gtag.js) - Google Analytics