代码之家  ›  专栏  ›  技术社区  ›  Adam Bellaire

regex工具(比如RegexBuddy)是个好主意吗?

  •  11
  • Adam Bellaire  · 技术社区  · 16 年前

    有些人在面对 问题,想想“我知道,我会用的 两个问题。 -杰米·扎温斯基

    因此,如果您将代码编写为 你尽可能聪明,顺便说一句 定义,不够智能,无法调试 信息技术

    我的担忧(分别是:)

    • 这个工具可以使用一个复杂的正则表达式来解决一个真正不需要它的问题。(另见 this question

    • 我的一个开发人员,使用正则表达式工具,将开始编写正则表达式,这些正则表达式(即使有注释)是任何没有(并且知道如何使用)正则表达式工具的人都无法维护的。

    我应该鼓励还是不鼓励使用正则表达式工具,特别是在生成新代码方面?我的担心有道理吗?还是我偏执?

    11 回复  |  直到 8 年前
        1
  •  44
  •   EBGreen    16 年前

    编程不好很少是工具的故障。这是开发人员不理解该工具的错误。对我来说,这就像说木匠不应该拥有螺丝刀,因为他可能会在钉子更合适的地方使用螺丝刀。

        2
  •  10
  •   Dan Aditi    16 年前

    就我个人而言,我看到像RegexBuddy和免费 Regex Coach 主要是作为学习工具。当然,有时它们可以帮助调试或理解现有正则表达式,但一般来说,如果您使用工具编写正则表达式,那么维护它将非常困难。

    • 当字符串匹配完成时,不要使用正则表达式。
    • 不要使用正则表达式来查看字符串是否是几个可能的值之一。
    • 编写测试!
    • 用更小的部分构造正则表达式。 如果您真的需要一个复杂的大型正则表达式,可以用更小的、可测试的部分构建它。这不仅使开发更容易(因为您可以分别正确地处理每个较小的部分),而且还使代码更可读、更灵活,并允许进行全面的注释。
    • 将正则表达式构建到专用的子例程/函数/方法中。 这使得为正则表达式(和)编写测试变得非常容易 只有
        3
  •  4
  •   Bill the Lizard    16 年前

    您应该鼓励使用使开发人员更高效的工具。话虽如此,确保他们使用 正当 工作的工具。您需要教育所有团队成员何时适合使用正则表达式,以及何时使用正则表达式 (less|more) 需要强大的方法。最后,应该对任何正则表达式(IMHO)进行彻底的注释,以确保下一代开发人员能够维护它。

        4
  •  4
  •   Remo.D    16 年前

    是的,它们可能会变得混乱和模糊,就像其他人可能编写的任何代码一样,但它们比代码有一个优势:它们以正式指定的方式(如果有扩展,至少通过您的语言)表示您感兴趣的字符串集。理解一段代码接受哪一组字符串需要对代码进行“反向工程”。

    我更喜欢维护单行正则表达式代码,而不是试图捕获一组字符串的复杂手工函数。

        5
  •  1
  •   Blair Mitchelmore    16 年前

    正则表达式测试工具是非常宝贵的。我一直在用它们。我的工作甚至不是特别重正则表达式,所以在我建立知识库的过程中,有一个程序来指导我克服细微差别是至关重要的。

        6
  •  1
  •   glenatron    16 年前

    Zawinski的评论,虽然令人愉快地油嘴滑舌,但基本上是无知的表现,而编写正则表达式并不是编码的全部,所以我不必担心这些引用。无论如何,没有人能把一场争论的全部变成一句话。

    如果您遇到一个正则表达式,它太复杂了,即使有注释也无法理解,那么对于这个特定的问题,正则表达式可能不是一个好的解决方案,但这并不意味着它们没有用处。我敢打赌,如果你故意避开它们,你的代码库中会有很多行代码,一个简单的正则表达式也可以完成同样的工作。

    Regexbuddy是一个有用的快捷方式,可以确保您正在编写的正则表达式满足您的期望-它当然会让生活更轻松,但对于您的问题,我认为重要的是使用它们。

        7
  •  1
  •   Your Common Sense    16 年前

    正如其他人所说,我认为使用或不使用这种工具是一个中立的问题。更重要的是:如果正则表达式非常复杂,需要内联注释,那么它就太复杂了。我从不评论我的regexp。我将大型或复杂的匹配问题分解为几个匹配步骤,或者使用多个匹配语句(=~),或者使用子regexp构建regexp。

    话虽如此,我认为任何称职的开发人员都应该相当精通正则表达式的编写和阅读。我已经使用正则表达式很多年了,从来没有遇到过需要编写或阅读非常复杂的正则表达式的时候。但是一个中等大小的正则表达式可能是进行验证或匹配的最优雅、最简洁的方法,不应该仅仅因为一个没有经验的开发人员可能读不懂正则表达式而回避正则表达式——最好是教育那个开发人员。

        8
  •  1
  •   Keng    16 年前

    应该

    不要担心整个“2个问题”的引用;这似乎是Perl(1997年说)而不是regex上的一次爆炸。

        9
  •  0
  •   rmeador    16 年前

    一个正则表达式工具完全有可能为我节省一些时间来实现我所知道的正则表达式功能,但我对此表示怀疑。。。我可以很快地输入,如果你能很好地理解语法(使用正则表达式惯用的文本编辑器真的很有帮助——我使用gVim),大多数正则表达式其实并不那么复杂。我认为学习一项技术比学习一根拐杖更能为您提供更好的服务,除非该工具可以输入简单的信息并输出大量样板代码。

        10
  •  0
  •   Axeman    16 年前

    好吧,听起来解决这个问题的办法是让一些聪明人引入一个正则表达式工具,在匹配时对自己进行注释。这就意味着 工具的问题不在于工具理解的内容与程序员理解的内容之间是否存在巨大差距。

    因此,文档可以有所帮助。

    这是一个真正的小例子,是下面这样的表(只是一个建议)

    Expression        Match     Reason
    ^                 Pos 0     Start of input
    \s+               "      "  At least one space
    (abs|floor|ceil)  ceil      One of "abs", "floor", or "ceil"
    ...
    

    然而,如果他们只是想调试RE,以确保它按照他们认为的方式运行,那么它与编写需要调试的代码没有太大区别。

    这是相对的。

        11
  •  0
  •   Nikos M.    10 年前

    两个正则表达式工具(用于 Node/JS , PHP python

    regex-analyzer regex-composer

    github repo