ili*_*ian 23 regex language-agnostic
令我感到震惊的是,大多数开发人员都不能很好地理解正则表达式.这也让我觉得,对于很多问题,其中使用正则表达式,代码一次性可以用来代替.当然,对于像电子邮件验证这样的东西,它可能会更慢并且是20行,但如果代码的性能不是非常重要,那么假设不使用正则表达式可能是更好的做法是否合理?
我在考虑维护代码而不是直线执行时间.
小智 49
维护一个正则表达式比维护20行代码要少得多.而且你低估了所需的代码量 - 对于任何复杂性的正则表达式,替换代码很容易就是200而不是20行.
Rob*_*nik 42
至少.多年来,我一直是一名专业开发人员,我没有遇到过一个不知道正则表达式是什么的开发人员.这是真的,不是每个人都喜欢使用它们或者非常擅长了解它的语法,但这并不意味着不应该使用它们.开发人员应该学习语法并使用正则表达式.
它就像是:" 好的.我们有Lambda表达,但是谁在乎,我仍然可以用老式的方式来做. "
不学习专业发展的关键方面是纯粹的懒惰,不应该长期容忍.
Fer*_*min 23
每当我使用正则表达式我总是试图发表评论正好说明它是如何构成的,因为我同意你的看法,并非所有开发人员理解他们,并要回一个正则表达式,即使你自己写的吧,可有头痛理解再次.
也就是说,他们肯定有自己的用途.尝试在没有它的情况下从一个文本框中删除所有html元素!
Mic*_*rdt 13
我在考虑维护代码而不是直线执行时间.
代码大小是降低可维护性的最重要因素.
虽然Regexps很难破译,但50行字符串处理方法也是如此 - 而后者更容易在罕见的极端情况下包含错误.
问题是:任何非平凡的正则表达式都必须像评论50行方法一样彻底评论.
正则表达式是一种特定于域的语言:没有通用的编程语言在表达正则表达式的字符串匹配时表现得非常有效或非常有效.您必须使用标准编程语言(即使是具有良好字符串库的语言)编写的代码块的大小将使其难以维护.这也是一个很好的分离关注点,以确保正则表达式只进行匹配.拥有一个基本上匹配的代码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)
在大多数编程语言中,这可以以不同的方式实现.我的建议是在适当的时候继续使用正则表达式,但是像对待其他代码一样对待它们.尽可能清楚地写出来,评论它们并测试它们.
您在可维护性方面提出了一个非常好的观点。正则表达式可能需要一些破译才能理解,但我怀疑替换它们的代码会更容易维护。正则表达式是非常强大且有价值的工具。使用它们但要小心使用它们,并思考如何明确正则表达式的意图是什么。
问候
拥有权利的同时也被赋予了重大的责任!
正则表达式很棒,但可能存在过度使用它们的倾向!没有适合所有情况的!