O'Reilly: mastering regular expression读中感2

这两天继续在看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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值