多选结构也是匹配优先的吗
Is Alternation Greedy?
多选分支的工作原理非常重要,因为在不同的正则引擎中它们是迥然不同的。如果遇到的多个多选分支都能够匹配,究竟会选择哪一个呢?或者说,如果不只一个多选分支能够匹配,最后究竟应该选择哪一个呢?如果选择的是匹配文本最长的多选分支,有人也许会说多选结构也是匹配优先的;如果选择的是匹配文本最短的多选分支,有人也许会说它是忽略优先的?那么(如果只能是一个的话)究竟是哪个?
让我们看看Perl、PHP、Java、.NET以及其他语言使用的传统型NFA引擎。遇到多选结构时,这种引擎会按照从左到右的顺序检查表达式中的多选分支。拿正则表达式「^(Subject |Date):」来说,遇到「Subject|Date」时,首先尝试的是「Subject」。如果能够匹配,就转而处理接下来的部分(也就是后面的「:」)。如果无法匹配,而此时又有其他多选分支(就是例子中的「Date」),正则引擎会回溯来尝试它。这个例子同样说明,正则引擎会回溯到存在尚未尝试的多选分支的地方。这个过程会不断重复,直到完成全局匹配,或者所有的分支(也就是本例中的所有多选分支)都尝试穷尽为止。
所以,对于常见的传统型NFA引擎,用「tour|to|tournament」来匹配‘threetournaments won’时,会得到什么结果呢?在尝试到‘threetournamentswon’时,在每个位置进行的匹配尝试都会失败,而且每次尝试时,都会检查所有的多选分支(并且失败)。而在这个位置,第一个多选分支「tour」能够匹配。因为这个多选结构是正则表达式中的最后部分,「tour」匹配结束也就意味着整个表达式匹配完成。其他的多选分支就不会尝试了。
因此我们知道,多选结构既不是匹配优先的,也不是忽略优先的,而是按顺序排列的,至少对传统型NFA来说是如此。这比匹配优先的多选结构更有用,因为这样我们能够对匹配的过程进行更多的控制——正则表达式的使用者可以用它下令:“先试这个,再试那个,最后试另一个,直到试出结果为止”。
不过,也不是所有的流派都支持按序排列的多选结构。DFA和POSIX NFA确实有匹配优先的多选结构,它们总是匹配所有多选分支中能匹配最多文本的那个(也就是本例中的「tournament」)。但是,如果你使用的是Perl、PHP、.NET、java.util.regex,或者其他使用传统型NFA的工具,多选结构就是按序排列的。
| 回书目 上一节 下一节 |
|
· Linux服务器架设自测获.. · 边界网关安全防护自测.. · Cisco CCNA最新真题自.. · 我在美联储监管银行 书.. · 我在美联储监管银行 目.. · 我在美联储监管银行 前.. |
· 入侵的艺术 目录 · 入侵的艺术 前言 · 网管员全真面试题自测.. · 子弹的本质—— 形势没.. · 学习大量的词汇—— 对.. · 重用的情况怎样 |
|
|||
| · Windows Home Server .. · 甲骨文85亿美元收购BEA · Windows Server 2008 · 如何优化IT 控制能耗 · 龙芯要做中国的“奔腾” · 手机病毒揭密 · 清除流氓软件——51CTO.. · 华为、贝恩资本22亿美.. |
· 网络安全之网吧安全 · 2007盘点专题:有多少.. · 数字证书技术ABC · 身份认证技术 · 即时通信软件(IM)安.. · 电子邮件安全 · 运营商封堵非法ADSL共享 · ARP攻击防范与解决方案 |
||
|
|||
| · VPN技术 · SOA 面向服务架构 · 子网掩码教程 · 三层交换技术专题 · Windows远程桌面应用 · 深入了解PGP加密技术 · MySQL数据库备份 · VPN技术 |
· 病毒查杀专题 · Solaris 10 配置管理 · Linux 基础 · Linux防火墙 · SSL VPN详细知识 · 路由器设置与口令恢复 · 打造安全服务器 · Linux 集群技术专题 |
||
|
|||
| · VPN技术 · SOA 面向服务架构 · 子网掩码教程 · 三层交换技术专题 · Windows远程桌面应用 · MySQL数据库备份 · 身份认证技术 · 病毒查杀专题 |
· 清除流氓软件——51CTO.. · SSL VPN详细知识 · Sniffer安全技术从入门.. · 常用交换机典型配置 · Linux 集群技术专题 · VPN技术 · 路由器设置与口令恢复 · Linux 基础 |
||
| ·DB2 Viper快速入门 ·DB2 9数据库的镜像分割与.. |
·将XML应用程序从DB2 8.x.. ·DB2 9中的pureXML:如何.. |
| ·ASP.NET 2.0 Web Part编.. ·ASP.NET 2.0 Web Part编.. |
·ASP.NET 2.0 Web Part编.. ·ASP.NET 2.0服务器控件之.. |
| ·三转CHM文件故障解决 ·错误是可以避免的——系.. |
·“变态级”系统管理员笔.. ·博客出书第一章目录曝光 |
| ·数据泄漏防御在企业的应用 ·1月第3周安全回顾 各种漏.. |
·寻找泄漏源 密封企业敏感.. ·1月第2周安全回顾 电子产.. |
| · 思科警告统一通信管理存.. · 家用路由器存在严重缺陷.. · 华为2008市场攻略 240亿.. |
· 浅谈国内的渗透评估过程 · VPN安全技术与应用 · 企业如何进行计算机取证.. |
| · IDC:2008年IT市场10大.. · Visual Studio 2005开发.. · 测试开发人员参考手册 |
· 年初17大热门技术 年底.. · 解析Ajax开发框架 走进A.. · 基于Google Maps与Ajax.. |
| · Linux操作系统下文件和.. · 热点:国内大型企业如此.. · IBM和Sun起争议 坚持不.. |
· 中小企业刀片市场将达20.. · IT人员应当了解的七个存.. · IDC:2008年IT市场10大.. |
| · 甲骨文Oracle 11g正式发.. · Oracle数据库开发之PL/S.. · Oracle数据库开发基础教.. |
· IT人员应当了解的七个存.. · 希捷承认部分硬盘暗藏病.. · 硬盘之父获得诺贝尔物理.. |