正则表达式值得麻烦吗?

ili*_*ian 23 regex language-agnostic

令我感到震惊的是,大多数开发人员都不能很好地理解正则表达式.这也让我觉得,对于很多问题,其中使用正则表达式,代码一次性可以用来代替.当然,对于像电子邮件验证这样的东西,它可能会更慢并且是20行,但如果代码的性能不是非常重要,那么假设不使用正则表达式可能是更好的做法是否合理?

我在考虑维护代码而不是直线执行时间.

小智 49

维护一个正则表达式比维护20行代码要少得多.而且你低估了所需的代码量 - 对于任何复杂性的正则表达式,替换代码很容易就是200而不是20行.

  • +1 LOC为200 LOC.正则表达式可以抽象出*非常复杂的状态机. (20认同)
  • ghostdog74:这适用于任何语言 - 问题是人们太倾向于将复杂的正则表达式推入没有注释/间距的单行 - 你不要用其他语言这样做,所以不要用正则表达式做! (3认同)
  • 不要忘记必须解读正则表达式正在做什么.如果能够阅读和理解这20行就像阅读一篇文章一样简单,那么这不会是一个问题. (2认同)
  • 是的,我知道 - 遗憾的是,人们唯一的曝光往往是来自那些试图表现得很酷的人群。如果更多的程序员将正则表达式* 作为一项基本技能来学习,而不是被视为深奥的晦涩难懂的书,那么第 2 部分将不会比常规代码差。(*和其他“工具”语言/技术) (2认同)

Rob*_*nik 42

专业开发人员应该熟悉基本语法

至少.多年来,我一直是一名专业开发人员,我没有遇到过一个不知道正则表达式是什么的开发人员.这是真的,不是每个人都喜欢使用它们或者非常擅长了解它的语法,但这并不意味着不应该使用它们.开发人员应该学习语法并使用正则表达式.

它就像是:" 好的.我们有Lambda表达,但是谁在乎,我仍然可以用老式的方式来做. "

不学习专业发展的关键方面是纯粹的懒惰,不应该长期容忍.

  • 太长?不应该容忍,完全停止. (5认同)

Fer*_*min 23

每当我使用正则表达式我总是试图发表评论正好说明它是如何构成的,因为我同意你的看法,并非所有开发人员理解他们,并要回一个正则表达式,即使你自己写的吧,可有头痛理解再次.

也就是说,他们肯定有自己的用途.尝试在没有它的情况下从一个文本框中删除所有html元素!

  • 秘密在于解释正则表达式匹配的内容(此部分与前缀匹配...现在这与名称匹配......我们可以重复前缀+名称三到五次......)而不是它如何匹配.我可以写很长的正则表达式,并且仍然对它们的可读性和可维护性感到满意. (4认同)

Mic*_*rdt 13

我在考虑维护代码而不是直线执行时间.

代码大小是降低可维护性的最重要因素.

虽然Regexps很难破译,但50行字符串处理方法也是如此 - 而后者更容易在罕见的极端情况下包含错误.

问题是:任何非平凡的正则表达式都必须像评论50行方法一样彻底评论.

  • 在维护方面,单元测试对复杂的正则表达式来说是一个很大的好处.而不是在程序逻辑的中间嵌入复杂的正则表达式,而是将它们提取到单独的类/函数中并添加单元测试.这大大减少了其他开发人员的维护开销,并提供了有关正则表达式实际执行的内容以及角落案例的有用文档. (4认同)

Joa*_*org 7

正则表达式是一种特定于域的语言:没有通用的编程语言在表达正则表达式的字符串匹配时表现得非常有效或非常有效.您必须使用标准编程语言(即使是具有良好字符串库的语言)编写的代码块的大小将使其难以维护.这也是一个很好的分离关注点,以确保正则表达式只进行匹配.拥有一个基本上匹配的代码blob,但在其间做其他事情会产生一些令人惊讶的错误.

另请注意,有一些机制可以使正则表达式更具可读性.在Python中,您可以启用详细模式,它允许您编写如下内容:

a = re.compile(r"""\d +  # the integral part
               \.    # the decimal point
               \d *  # some fractional digits""", re.X)
Run Code Online (Sandbox Code Playgroud)

另一种可能性是从字符串构建正则表达式,按行和注释每一行,如下所示:

a = re.compile("\d+"  # the integral part
               "\."    # the decimal point
               "\d *"  # fraction  digits
               )
Run Code Online (Sandbox Code Playgroud)

在大多数编程语言中,这可以以不同的方式实现.我的建议是在适当的时候继续使用正则表达式,但是像对待其他代码一样对待它们.尽可能清楚地写出来,评论它们并测试它们.


How*_*May 5

您在可维护性方面提出了一个非常好的观点。正则表达式可能需要一些破译才能理解,但我怀疑替换它们的代码会更容易维护。正则表达式是非常强大且有价值的工具。使用它们但要小心使用它们,并思考如何明确正则表达式的意图是什么。

问候


ste*_*ell 5

拥有权利的同时也被赋予了重大的责任!

正则表达式很棒,但可能存在过度使用它们的倾向!没有适合所有情况的!

  • +1 - 也:“人们害怕他们不理解的东西。” 现代社会中最具挑战性的事情应该结合蜘蛛侠和 X 战警的原则来处理。 (7认同)