正则表达式的匹配原理
来源:互联网 发布:Tensorflow doc 编辑:程序博客网 时间:2024/06/01 11:23
匹配原则
优先选择最左端的匹配结果
废话不多说,上题:
“indicates cat”用cat进行匹配结果就是indicates。
“indicates cat fat”用/fat|cat/进行匹配结果就是indicates,因为正则表达式的每一次尝试都要进行到底。
标准的匹配量词(*、+、?、{m,n})优先匹配
标准匹配两次的结果“可能”并非所有可能中最长的,但是它们总是尝试匹配尽可能多的字符,直到匹配上线为止。如果最终结果并不是可能中最长的,原因是匹配字符过多导致匹配失败。
举个栗子,/\b\w+s\b/中,对于单词his,\w能够匹配整个单词,但是,这样的话s就没办法匹配了,这个时候\w只能匹配到hi,把s留给s\b。
过度的优先匹配
这里需要注意的是“尽可能匹配”和“强迫释放”
举个栗子/^.*([0-9][0-9])/
匹配”abcdefg12hijkl”。其中,/.*/
匹配整个字符串,然后,第一个/[0-9]/
的匹配强迫/.*/
释放字符l(最后一个字符),但是不能匹配数字成功,/.*/
就继续释放字符,指导匹配到2,但后第二个/[0-9]/
有强迫其释放,从而匹配成功。
再举个栗子,/^.*[0-9]+/
匹配”abcdefg123”的结果是3,而不是123.
NFA引擎——表达式主导
回溯会依次处理各个子表达式或这组成元素,遇到两个可能中进行选择的时候,会选择其一,记住另一个,以备稍后可能的需要。
举个栗子使用/to(nite|knight|night)/
匹配文本”tonight”,从t开始匹配,然后匹配o,然后尝试匹配nite,不成功,回退到to,开始匹配knight,不成功,再回退到to,匹配night,成功。
要点:面对选择,那个分支优先选择?
如果在“进行尝试”和“跳过尝试”之间选择,对于匹配优先量词,引擎会优先选择“进行尝试”,而对于忽略优先量词(也就是懒惰匹配),会选择“跳过尝试”。
DFA引擎——文本主导
- 正则表达式的匹配原理
- 正则表达式的匹配原理
- 正则表达式匹配原理
- 匹配的正则表达式
- 正则表达式的匹配
- 正则表达式的匹配
- 正则表达式的匹配
- 正则表达式的匹配
- 正则表达式: NFA引擎匹配原理
- 算法#20--正则表达式匹配原理
- 正则表达式: NFA引擎匹配原理
- 详解正则表达式匹配算法原理
- 正则表达式: NFA引擎匹配原理
- 正则表达式:NFA引擎匹配原理
- 正则表达式的匹配处理
- 正则表达式常用的匹配
- javascript的正则表达式匹配
- 超链接的正则表达式匹配
- 每次在windows上看到有流量在后台跑我都会...
- 快速开发android应用3-基于okhttp解析服务数据
- SHU-“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛-K-购买装备
- Android总结篇系列:Android广播机制
- SHU-“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛-I-丢史蒂芬妮
- 正则表达式的匹配原理
- 在idea下用Python搭建Django
- Excel使用经验——Excel连接Oracle,发生3706错误的解决办法
- springMVC+spring data jpa的使用
- 如何在Cygwin中使用Z-shell
- 继续逆向youdaodict
- VBA编码经验——日期类型的比较
- 学以致用——Excel连接Oracle生成iKB报告——Part3(功能优化)
- 他山定时 v1.0.7源码, 使用OHUI开发