经过一些研究后,我发现使用正则表达式解析递归结构(如HTML或XML)是不可能的.是否有可能全面列出我应该避免使用正则表达式的日常编码场景,因为使用正则表达式执行该特定任务是不可能的?让我们说有问题的正则表达式引擎不是PCRE.
我会在我的博文中剽窃自己,何时使用以及何时不使用正则表达式 ......
公共网站不应允许用户输入正则表达式进行搜索.为网站的搜索引擎向公众提供正则表达式的全部功能可能会产生破坏性影响.应该不惜一切代价避免使用正则表达式拒绝服务(ReDoS)攻击.
不应使用正则表达式进行HTML/XML解析.首先,正则表达式旨在解析常规语言,这是Chomsky层次结构中最简单的语言.现在,随着在正则表达式的.NET风格中平衡组定义的出现,您可以冒险进入稍微复杂的领域,并在受控情况下使用XML或HTML做一些事情.但是,没有多大意义.XML和HTML都有可用的解析器,可以更轻松,更高效,更可靠地完成工作.在.NET中,XML可以使用旧的XmlDocument方式处理,甚至可以使用Linq to XML轻松处理.或者对于HTML,有HTML Agility Pack.
结论
正则表达式有其用途.我仍然认为,在许多情况下,他们可以为程序员节省大量的时间和精力.当然,给定无限的时间和资源,人们几乎总能构建一个比等价的正则表达式更有效的程序解决方案.
你放弃正则表达式的决定应该基于三件事:
1.)正则表达式在您的场景中是如此之慢,以至于它已成为瓶颈?
2.)您的程序解决方案实际上比正则表达式更快更容易编写吗?
3.)是否有专门的解析器可以更好地完成工作?