结语
04-13Ctrl+D 收藏本站
Final Comments
我确信自己已经陶醉于 Perl 的正则表达式中,本章的开头我曾提到,这是有充分理由的。Perl之父Larry Wall,完全是按照常识和发明的动力(Mother of Invention)来做的。是的,Perl的正则表达式实现也有自己的问题,但是我仍然愿意醉心于Perl正则语言丰富的功能,及其与Perl其他部分的融合。
当然,我热情而不盲目——Perl并没有提供某些我希望的特性。本书第1版渴望的某些特性现在已经添加了,我会继续提出要求,希望 Perl 会继续添加。相对于其他实现,Perl 最急需提供的功能是命名捕获(☞138)。本章给出了模拟的办法,但还存在若干限制。提供内建支持是最好的解决办法。如果能提供字符组集合运算(☞125)也很好,虽然目前可以费点周折用顺序环视来模拟(☞126)。
然后是占有优先量词(☞142)。Perl的固化分组提供了更多的完整功能,但是在某些情况下占有优先量词的解法更清楚更美观。所以,两种办法我都喜欢。事实上,还有两个我喜欢两个相关结构,目前还没有任何流派提供。其中之一是“cut”操作,或者叫「\v」,它会立刻清除当前存在的所有保存状态(这样,「x+\v」就等于「x++」或者「(?>x+)」)。另一个结构用来禁止传动装置的任何进一步的操作。它的意思是“要么在当前路径找到一个匹配,要么就不容许任何匹配,没有其他可能。”可能用「\V」来表示比较好。
还有个与「\V」有关的想法,我认为在传动装置中添加通用的钩子功能(general hooks)是有用的,这样第335页的程序就可以大大化简。
最后要说的是,我在第 337 页曾经提到,在内嵌代码插值到正则表达式时,提供更多的控制是非常有用的。
Perl当然不是理想的正则表达式语言,但它很接近这个目标,而且一直在进步。