[Regular] 4、正则表达式的匹配原理回溯
2009-06-18 16:17
204 查看
NFA引擎最重要的性质就是,它会依次处理各个表达式或组合元素,遇到需要在两个可能成功的途经中进行选择的时候,它会选择其一,然后记住另一个选项,以备稍后可能的需要。一般需要做出选择的情形包括量词和多选结构。
真实世界中的面包屑
回溯就像在道路的每个分岔口留下一小堆面包屑。如果走了死路,就可以原路返回,直到遇到面包屑标示的尚未尝试过的道路。如果还是死路,继续返回,找到下一堆面包屑,如些重复,直到找到出路,或者走完所有没有尝试过的道路。
不论选择那一种途经,如果它能成功匹配,而且余下的正则也匹配成功了,匹配即告完成。如果余下的正则匹配失败,引擎会回溯到之前做选择时记录的备用途经。这样引擎最终会尝试表达式的所有可能途经(如果没有匹配成功的话)。
回溯的两个要点
1、如果需要在“进行尝试”和“跳过尝试”之间选择,对于匹配优先量词,引擎会优先选择“进行尝试”,而对于忽略优先量词,会选择“跳过尝试”。
2、在需要回溯时,距离当前最近储存的选项就是当本地失败强制回溯时返回的。使用的原则是LIFO(last in first out,后进先出)。
真实世界中的面包屑
回溯就像在道路的每个分岔口留下一小堆面包屑。如果走了死路,就可以原路返回,直到遇到面包屑标示的尚未尝试过的道路。如果还是死路,继续返回,找到下一堆面包屑,如些重复,直到找到出路,或者走完所有没有尝试过的道路。
不论选择那一种途经,如果它能成功匹配,而且余下的正则也匹配成功了,匹配即告完成。如果余下的正则匹配失败,引擎会回溯到之前做选择时记录的备用途经。这样引擎最终会尝试表达式的所有可能途经(如果没有匹配成功的话)。
回溯的两个要点
1、如果需要在“进行尝试”和“跳过尝试”之间选择,对于匹配优先量词,引擎会优先选择“进行尝试”,而对于忽略优先量词,会选择“跳过尝试”。
2、在需要回溯时,距离当前最近储存的选项就是当本地失败强制回溯时返回的。使用的原则是LIFO(last in first out,后进先出)。
相关文章推荐
- [Regular] 4、正则表达式的匹配原理原则
- Asp.net RegularExpressionValidator 控件验证输入值验证输入值是否匹配正则表达式指定的模式
- 正则表达式: NFA引擎匹配原理
- [置顶] 通配符匹配(Wildcard Matching)与正则表达式匹配(Regular Expression Matching)解法解析
- 正则表达式学习笔记(二)表达式的匹配原理
- LeetCode--Regular Expression Matching 正则表达式匹配
- 多正则表达式匹配(Multiple Regular Expression Matching)
- Asp.net RegularExpressionValidator 控件验证输入值验证输入值是否匹配正则表达式指定的模式
- leetcode 10 Regular Expression Matching(简单正则表达式匹配)
- [LeetCode] Regular Expression Matching 正则表达式匹配
- 判断正则表达式是否匹配 Regular Expression Matching @LeetCode
- LeetCode OJ:Regular Expression Matching(正则表达式匹配)
- [置顶] 通配符匹配(Wildcard Matching)与正则表达式匹配(Regular Expression Matching)解法解析
- 正则表达式-回溯引用,前后一致匹配(五)
- leetcode Wildcard Matching ,Regular Expression Matching (正则表达式匹配和通配符匹配)
- 简单的正则表达式匹配 Regular Expression Matching
- 正则表达式匹配也可以简单快速(上:原理部分)
- leetcode 10 Regular Expression Matching(简单正则表达式匹配)
- Regular Expression Matching,regex,正则表达式匹配,利用动态规划
- 正则表达式匹配解析过程探讨分析(正则表达式匹配原理)