频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

多选结构也是匹配优先的吗

作者: Friedl,J.E.F.著/余晟译 出处:电子工业出版社博文视点  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2008-01-21 15:24
关 键 词:正则表达式  引擎  正则引擎  匹配  精通正则表达式
阅读提示:《精通正则表达式》本书主要讲了表达式的正则引擎及其工作原理,本文阐述了多选结构也是匹配优先的吗。

多选结构也是匹配优先的吗
Is Alternation Greedy?

多选分支的工作原理非常重要,因为在不同的正则引擎中它们是迥然不同的。如果遇到的多个多选分支都能够匹配,究竟会选择哪一个呢?或者说,如果不只一个多选分支能够匹配,最后究竟应该选择哪一个呢?如果选择的是匹配文本最长的多选分支,有人也许会说多选结构也是匹配优先的;如果选择的是匹配文本最短的多选分支,有人也许会说它是忽略优先的?那么(如果只能是一个的话)究竟是哪个?

让我们看看Perl、PHP、Java、.NET以及其他语言使用的传统型NFA引擎。遇到多选结构时,这种引擎会按照从左到右的顺序检查表达式中的多选分支。拿正则表达式「^(Subject |Date):」来说,遇到「Subject|Date」时,首先尝试的是「Subject」。如果能够匹配,就转而处理接下来的部分(也就是后面的「:」)。如果无法匹配,而此时又有其他多选分支(就是例子中的「Date」),正则引擎会回溯来尝试它。这个例子同样说明,正则引擎会回溯到存在尚未尝试的多选分支的地方。这个过程会不断重复,直到完成全局匹配,或者所有的分支(也就是本例中的所有多选分支)都尝试穷尽为止。

所以,对于常见的传统型NFA引擎,用「tour|to|tournament」来匹配‘threetournaments won’时,会得到什么结果呢?在尝试到‘threetournamentswon’时,在每个位置进行的匹配尝试都会失败,而且每次尝试时,都会检查所有的多选分支(并且失败)。而在这个位置,第一个多选分支「tour」能够匹配。因为这个多选结构是正则表达式中的最后部分,「tour」匹配结束也就意味着整个表达式匹配完成。其他的多选分支就不会尝试了。

因此我们知道,多选结构既不是匹配优先的,也不是忽略优先的,而是按顺序排列的,至少对传统型NFA来说是如此。这比匹配优先的多选结构更有用,因为这样我们能够对匹配的过程进行更多的控制——正则表达式的使用者可以用它下令:“先试这个,再试那个,最后试另一个,直到试出结果为止”。

不过,也不是所有的流派都支持按序排列的多选结构。DFA和POSIX NFA确实有匹配优先的多选结构,它们总是匹配所有多选分支中能匹配最多文本的那个(也就是本例中的「tournament」)。但是,如果你使用的是Perl、PHP、.NET、java.util.regex,或者其他使用传统型NFA的工具,多选结构就是按序排列的。

【责任编辑:雪花 TEL:(010)68476606】

回书目   上一节   下一节
发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
关键字阅读
频道精选