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

Regex 什么时候不应该使用正则表达式?,regex,Regex,经过一些研究,我发现使用正则表达式解析递归结构(如HTML或XML)是不可能的。是否有可能全面列出我应该避免使用正则表达式的日常编码场景,因为使用正则表达式不可能完成特定任务?假设所讨论的正则表达式引擎不是PCRE。在以下情况下不要使用正则表达式: 您试图解析的语言不是,或 当有现成的解析器专门为您试图解析的数据而设计时 用正则表达式解析HTML和XML通常是个坏主意,因为它们不是正则语言,而且已经存在可以为您解析的库 另一个例子是,如果您需要检查整数是否在0-255范围内,那么使用您的语言

经过一些研究,我发现使用正则表达式解析递归结构(如HTML或XML)是不可能的。是否有可能全面列出我应该避免使用正则表达式的日常编码场景,因为使用正则表达式不可能完成特定任务?假设所讨论的正则表达式引擎不是PCRE。

在以下情况下不要使用正则表达式:

  • 您试图解析的语言不是,或
  • 当有现成的解析器专门为您试图解析的数据而设计时
用正则表达式解析HTML和XML通常是个坏主意,因为它们不是正则语言,而且已经存在可以为您解析的库


另一个例子是,如果您需要检查整数是否在0-255范围内,那么使用您的语言库函数将其解析为整数,然后检查其数值,而不是尝试编写与此范围匹配的正则表达式,就更容易理解了。

我的经验法则是,当不存在其他解决方案时,请使用正则表达式。如果已经有了解析器(例如,XML、HTML),或者您只是在寻找字符串而不是模式,那么就不需要使用正则表达式


总是问自己“我能不用正则表达式解决这个问题吗?”。这个问题的答案将告诉您是否应该使用正则表达式

我会从我的博客文章中剽窃我自己

公共网站不应允许用户输入正则表达式进行搜索。将regex的全部功能提供给普通公众作为一个网站的搜索引擎可能会产生毁灭性的影响。应该不惜一切代价避免(重做)攻击

HTML/XML解析不应使用正则表达式完成。首先,正则表达式被设计用来解析一个最简单的。现在,随着.NET风格的正则表达式中平衡组定义的出现,您可以冒险进入稍微复杂的领域,在受控情况下使用XML或HTML做一些事情。然而,这并没有多大意义。XML和HTML都有解析器,可以更轻松、更高效、更可靠地完成这项工作。在.NET中,XML可以用旧的XmlDocument方式处理,甚至更容易使用。或者对于HTML,有一个

结论

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

您放弃regex的决定应基于以下三点:

1.)正则表达式在您的场景中是否太慢,以至于成为瓶颈

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


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

我理解这一点,但我只想知道一些日常编码场景,在这些场景中,我应该远离正则表达式。例如解析HTML或XML。我认为你的问题太广泛了。它离“何时使用工具”还不够远。你不能期望所有可能的情况都有一个明确的答案,是吗?何时使用工具:当你理解它,当它简化你的工作,当它使代码更清晰而不是更复杂。。。何时使用正则表达式?当您需要根据字符串匹配模式时。没有比这更好的了。我同意“何时使用正则表达式”是一个广泛的问题。但是我认为了解一些常见的场景是很有用的,在这些场景中,您不能使用正则表达式来完成特定的任务。这将为开发人员节省大量时间。