Practical Regex Techniques
现在我们已经掌握了编写正则表达式所需的基本知识,我希望在更复杂的环境中应用这些知识来处理更复杂的问题。每个正则表达式都必须在下面两个方面求得平衡:准确匹配期望匹配的内容,忽略不期望匹配的字符。我们已经看过许多例子都说明,如果应用得当,匹配优先非常有用,但如果不够小心,也可能带来麻烦,在本章我们还将看到许多例子。
NFA 引擎还需要平衡另外一个因素:效率,这也是下一章的主题。设计糟糕的正则表达式——即使可以认为没犯错误——也足以让引擎瘫痪。
本章出现的主要是各种实例,我会带领读者循着我的思路去解决各种问题。某些例子或许对读者并没有现实价值,但我仍然推荐读者阅读这些实例。
例如,即使你的工作不涉及HTML,我仍推荐你从处理HTML的实例中吸取知识。原因在于,编写巧妙的正则表达式不仅仅是一种手艺(skill)——而且还是一种艺术(art)。它的教授和学习,不是依靠罗列规则,而是依靠经验,所以,我用这些例子告诉读者,自己在过去的若干年从经验中获得的深刻启示。
当然,读者仍然需要自己掌握这些知识,但是研究本章的例子是个好的起点。