zoukankan      html  css  js  c++  java
  • [Regular] 4、正则表达式的匹配原理回溯

      NFA引擎最重要的性质就是,它会依次处理各个表达式或组合元素,遇到需要在两个可能成功的途经中进行选择的时候,它会选择其一,然后记住另一个选项,以备稍后可能的需要。一般需要做出选择的情形包括量词和多选结构。


    真实世界中的面包屑
      回溯就像在道路的每个分岔口留下一小堆面包屑。如果走了死路,就可以原路返回,直到遇到面包屑标示的尚未尝试过的道路。如果还是死路,继续返回,找到下一堆面包屑,如些重复,直到找到出路,或者走完所有没有尝试过的道路。
      不论选择那一种途经,如果它能成功匹配,而且余下的正则也匹配成功了,匹配即告完成。如果余下的正则匹配失败,引擎会回溯到之前做选择时记录的备用途经。这样引擎最终会尝试表达式的所有可能途经(如果没有匹配成功的话)。

    回溯的两个要点
      1、如果需要在“进行尝试”和“跳过尝试”之间选择,对于匹配优先量词,引擎会优先选择“进行尝试”,而对于忽略优先量词,会选择“跳过尝试”。
         2、在需要回溯时,距离当前最近储存的选项就是当本地失败强制回溯时返回的。使用的原则是LIFO(last in first out,后进先出)。

  • 相关阅读:
    zlog 使用手册
    Contribution and Coding Style Guide Bullet Physics Library
    Windows系统读写ext2/3/4文件系统的工具「ext2fsd」
    blender svn
    c# 各个版本
    c# Looping with the foreach statement
    C# 9.0 and .NET 5 – Modern Cross-Platform Development
    我的常用博客
    qml通过stacklayout实现页面切换
    JSON解析-android平台(转)
  • 原文地址:https://www.cnblogs.com/abeen/p/1505932.html
Copyright © 2011-2022 走看看