什么时候不应该使用正则表达式?

Nar*_*ala 6 regex

经过一些研究后,我发现使用正则表达式解析递归结构(如HTML或XML)是不可能的.是否有可能全面列出我应该避免使用正则表达式的日常编码场景,因为使用正则表达式执行该特定任务是不可能的?让我们说有问题的正则表达式引擎不是PCRE.

Mar*_*ers 27

在下列情况下不要使用正则表达

  • 您尝试解析的语言不是常规语言,或
  • 当有可用的解析器专门针对您要解析的数据时.

使用正则表达式解析HTML和XML通常是一个坏主意,因为它们不是常规语言,并且因为已经存在可以为您解析它的库.

再举一个例子,如果你需要检查一个整数是否在0-255范围内,你更容易理解你是否使用你的语言的库函数将它解析为一个整数然后检查它的数值而不是试图写常规与此范围匹配的表达式.


Ste*_*ham 7

我会在我的博文中剽窃自己,何时使用以及何时不使用正则表达式 ......

公共网站不应允许用户输入正则表达式进行搜索.为网站的搜索引擎向公众提供正则表达式的全部功能可能会产生破坏性影响.应该不惜一切代价避免使用正则表达式拒绝服务(ReDoS)攻击.

不应使用正则表达式进行HTML/XML解析.首先,正则表达式旨在解析常规语言,这是Chomsky层次结构中最简单的语言.现在,随着在正则表达式的.NET风格中平衡组定义的出现,您可以冒险进入稍微复杂的领域,并在受控情况下使用XML或HTML做一些事情.但是,没有多大意义.XML和HTML都有可用的解析器,可以更轻松,更高效,更可靠地完成工作.在.NET中,XML可以使用旧的XmlDocument方式处理,甚至可以使用Linq to XML轻松处理.或者对于HTML,有HTML Agility Pack.

结论

正则表达式有其用途.我仍然认为,在许多情况下,他们可以为程序员节省大量的时间和精力.当然,给定无限的时间和资源,人们几乎总能构建一个比等价的正则表达式更有效的程序解决方案.

你放弃正则表达式的决定应该基于三件事:

1.)正则表达式在您的场景中是如此之慢,以至于它已成为瓶颈?

2.)您的程序解决方案实际上比正则表达式更快更容易编写吗?

3.)是否有专门的解析器可以更好地完成工作?