`
njmnjx
  • 浏览: 234727 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于"匹配优先"和"忽略优先"

阅读更多
为了更好的理解“匹配优先”和“忽略优先”我们可以这样定义:
“匹配优先”可以理解为“贪婪匹配”或“非懒惰匹配”;
“忽略优先”可以理解为“非贪婪匹配”或“懒惰匹配”;


强调一点:表达式cat不是匹配以cat开头的字串。而是匹配一个c,再匹配一个a,最后匹配一个t。Jeffrey E.F.Friedl这样告诉我们。

一、匹配优先
字  串:     
<B>Billions</B> and <B>Zillions</B> of

表达式:     
<B>.*</B>

结  果:      
<B>Billions</B> and <B>Zillions</B>

描  述:
         匹配优先时.*只从自身出发,匹配尽可能多的内容,只有在全局匹配需要的情况下才会“被迫”交还一些字符。
     在最开始的<B>匹配之后,.*能够匹配任何字符,所以它会一直匹配到字符串的末尾。
     为了让最后的</B>能够匹配,.*会不断交还字符(或者,更确切的说,是正则引擎强迫它回退),顺序:‘>’、‘B’、‘/’、‘<’直到满足‘<’匹配为止。


二、忽略优先
字  串:     
<B>Billions</B> and <B>Zillions</B> of

表达式:     
<B>.*?</B>

结  果:      
<B>Billions</B>
<B>Zillions</B>
描  述:
        开始的<B>匹配之后,.*?首先决定不需要匹配任何字符,因为它是忽略优先的。
    于是,控制权交给后面的‘<’符号:
    此时‘<’无法匹配‘B’,所以控制权交还给.*?则成功匹配‘B’。
    此时.*?又必须选择,是继续尝试匹配,还是忽略?因为它是忽略优先的,会首先选择忽略。
    接下来‘<’仍然无法匹配‘i’,所以控制权又再一次的交由.*?成功匹配后再交由‘<’,……这样继续直到‘<’匹配成功。
    此时位置为<B>后第一次出现</B>的位置。
    这样就出现了两个成功匹配结果<B>Billions</B>和<B>Zillions</B>

分享到:
评论

相关推荐

    正则基础之——NFA引擎匹配原理[参照].pdf

    ” 属于匹配优先量词,在可匹配可不匹配时,会先选择尝试匹配,只有这种选择会使整个表达式无法匹配成功时,才会尝试让出匹配到的内容。这里的量词“?” 是用来修饰字符“b” 的,所以“b?” 是一个整体。匹配过程:...

    算符优先分析算法的探讨与改进

    传统的算符优先分析算法在处理语法分析时可能忽略了一些细节,比如错误诊断和恢复机制的实现。本文旨在探讨算符优先分析算法的基本原理,并提出一种改进方案以增强其在面对错误时的处理能力。 #### 二、算符优先...

    精通正则表达式~~~

    匹配优先和忽略优先都期望获得匹配... 167 匹配优先、忽略优先和回溯的要旨... 168 占有优先量词和固化分组... 169 占有优先量词,?+、*+、++和{m,n}+. 172 环视的回溯... 173 多选结构也是匹配优先的吗... ...

    详解Nginx location 匹配规则

    7. 访问“/img/a.gif”将匹配规则D,即使规则Y也能匹配,但由于正则匹配优先,规则Y被忽略。 8. 访问“/img/a.tiff”将匹配规则Y。 9. 访问“/category/id/1111”时,由于之前的所有规则都不匹配,最终会匹配到规则F...

    nginx语法规则.docx

    访问 http://localhost/img/a.gif 会匹配上规则 D,虽然规则 Y 也可以匹配上,但是因为正则匹配优先,而忽略了规则 Y。 访问 http://localhost/img/a.tiff 会匹配上规则 Y。 访问 ...

    最短补全词(python 排序匹配)1

    1. **预处理车牌号**:首先,我们需要对车牌号进行处理,忽略其中的数字和空格,并将所有字母转为小写。这样可以确保在后续的匹配过程中不区分大小写。 2. **创建补全词列表**:从处理后的车牌号中提取出所有字母,...

    基于随机几何理论的流行度匹配边缘缓存策略.docx

    针对文献中忽略数据流行度的传统缓存策略,本文提出了流行度匹配缓存策略,这种策略能够在减少回程带宽压力的同时,降低平均中断概率。文章还分析了微基站的部署密度和缓存容量如何影响平均中断概率。 系统模型中,...

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

    ”,即变成属于非贪婪模式的量词,也叫做忽略优先量词,包括: “{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。 从正则语法的角度来讲,被匹配优先量词修饰的子表达式使用的就是贪婪模式,如“(Expression)+

    离散资源的匹配、分配和交换-研究论文

    文中提及的优先机制、帕累托效率结构和平均主义机制都是为解决此问题而设计的匹配机制。 学校选择问题关注如何设计一个公平且高效的机制来分配学生到他们选择的学校。大学入学、学生安置以及学校选择问题都可以看作...

    Excel批量对比工具-20240704

    3、规则匹配规则优化:优先使用匹配到的最长表名规则 4、修复其他已知bug 20230310更新内容: 修复影响对比的bug 1、修改bug:对比双方只有一个sheet存在数据时,对比有报错 2、兼容部分CSV使用gbk打开会编码报错...

    基于地图匹配的时空轨迹匿名算法 (2014年)

    为此,提出一种基于地图匹配的时空轨迹匿名算法,利用真实路网数据构造假轨迹的候选匹配集,通过设置时间和空间匿名函数,利用启发式广度优先搜索算法搜索目标匹配轨迹点,满足时空匿名性和空间相关性的隐私安全条件...

    Excel批量对比工具

    1、批量对比Excel,结果以Excel展示,以不同颜色标记差异 2、支持多进程对比,高效比对文件 3、python+pyqt5编写 4、支持CMD启动 ...3、规则匹配规则优化:优先使用匹配到的最长表名规则 4、修复其他已知bug

    02队列与栈1

    当遍历字符串时,遇到非括号字符则忽略,遇到左括号将其压入栈中,遇到右括号则尝试与栈顶的左括号匹配。若匹配成功,将这对括号从字符串中删除;若匹配失败,说明括号不匹配。遍历结束后,如果栈为空,则说明所有...

    Excel批量对比工具-20230310

    3、规则匹配规则优化:优先使用匹配到的最长表名规则 4、修复其他已知bug 20230310更新内容: 修复影响对比的bug 1、修改bug:对比双方只有一个sheet存在数据时,对比有报错 2、兼容部分CSV使用gbk打开会编码报错...

    Excel批量对比工具-20230606

    3、规则匹配规则优化:优先使用匹配到的最长表名规则 4、修复其他已知bug 20230310更新内容: 修复影响对比的bug 1、修改bug:对比双方只有一个sheet存在数据时,对比有报错 2、兼容部分CSV使用gbk打开会编码报错...

    正则表达式编写

    8. **修饰符**:如在正则表达式后添加 `i` 表示忽略大小写,`g` 表示全局匹配,`m` 表示多行模式。 辅助工具如“MTracer”对于学习和调试正则表达式非常有帮助。它们通常具备以下功能: 1. **实时匹配**:输入正则...

    差分信号PCB布局布线时的几个常见误区

    2. 线长匹配比等间距更加重要,应优先考虑线长一致,为线长不一致的差分对添加匹配电阻。 3. 差分走线的间距要足够大,以减少相互干扰,并考虑使用地平面或其他结构提供有效的屏蔽。 4. 在实际设计中,根据应用和...

    Implementation-of-Adv-Data-Structures:实施了各种图形高级算法项目,如最大加权二分匹配、最短路径算法(如 Bellman-Ford 算法、Djikstra 算法、DAG、最小生成树算法(如 Kruskal、Prims、哈希、优先队列)、电子商务网站(如 Amazon)、算术运算使用链表等非常大的数字。 用Java开发所有项目

    图形中的高级算法项目,如最大加权二分匹配、最短路径算法(如 Bellman-Ford 算法、Djikstra 算法、DAG、最小生成树算法(如 Kruskal、Prims、哈希、优先队列)、电子商务网站(如亚马逊)、非常大的算术运算数字...

Global site tag (gtag.js) - Google Analytics