O'Reilly: mastering regular expression读中感2

来源:互联网 发布:金融数据挖掘 下载 编辑:程序博客网 时间:2024/06/05 20:29

这两天继续在看Mastering regula rexpression。感慨挺多的,草记一下。

计算机书籍,如果要讲深了的话会变得十分枯燥的。而要想掌握正则表达式,不讲深了不行。于是第四章作者就开始讨论起DFA,NFA。这两个单词学过编译原理的大概还记得一个确定性有限自动机,一个是非确定性有限自动机。在课本里头提到这两个单词之后,就是一大堆数学符号的证明计算,很多人就是从这个时候开始扔下课本的。。。。一开始在Mastering regula rexpression看到要讲这个我想是要硬着头皮看下去了。哪想到一路下来作者都是用了类比的手法与汽车引擎做比较同时结合例子讨论二者的性能以及本质区别,没有意向之中的有向图。。。如果是讲理论的文章的话,这会儿Θ这个符号就是时候出来了,然后二次项系数,指数级等等等等。。。。。介绍一件工具的时候,其所有性能以及部件当然要详细的描述给用户,但是还有一个目标必须尽可能的达到,那就是如何让读者以最快的速度理解其含义,而不是一开始就暴露所有的复杂度。。。。想比之下,国内很多书籍几乎都是照抄Dragon Book,看似宏篇大论实则满口胡言,并且不对自己的理论进行验证。。。。

 

附带,现代的regex已经发展的相当强大了,一直 以来因为regex对回溯控制不好,程序走遍所有可能,导致效率不行,所以还是很多人从造轮子起写 C语言的匹配代码,可是现代早已经有atomic group了!

#atomic group也是功能性的parenthesis所以不保存变量
#并且atomic group当步进的时候消除已知匹配操作符的栈,当最后不匹配的时候快速失败,不回溯
#达到在已知不需要回溯的条件下减枝的目的

#下面代码匹配最后的:不成功所以走一遍之后就快速返回了。
$str = "subject:";
$str =~ s/(?>(/w+):)/$1/i;
print $str;

原创粉丝点击