首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式真的可维护吗?

正则表达式真的可维护吗?
EN

Stack Overflow用户
提问于 2008-09-29 21:27:43
回答 20查看 2.2K关注 0票数 17

我见过的任何使用Regexes的代码都倾向于将它们用作黑盒:

  1. Put in string
  2. Magic Regex
  3. Get out string

在生产代码中使用这似乎不是一个特别好的主意,因为即使是很小的更改通常也会导致完全不同的正则表达式。

除了标准是永久的和不变的情况外,正则表达式是做事情的方式,还是尝试不同的方法更好?

EN

回答 20

Stack Overflow用户

回答已采纳

发布于 2008-09-29 21:33:48

如果正则表达式很长且难以理解,使得它们很难维护,那么应该对它们进行注释。

许多正则表达式实现允许您在正则表达式中填充空格和注释。

请参阅https://www.regular-expressions.info/freespacing.html#parenscomment

和编码恐怖:Regular Expressions: Now You Have Two Problems

我所见过的任何使用正则表达式的代码都倾向于使用它们作为一个黑盒:

如果你所说的黑盒是指抽象,那就是所有的编程,试图抽象掉困难的部分(解析字符串),这样你就可以专注于问题域(我想匹配哪种类型的字符串)。

即使是一个很小的更改,通常也会导致一个完全不同的正则表达式。

这对任何代码都是正确的。只要您正在测试您的正则表达式以确保它与您期望的字符串匹配,最好使用单元测试,那么您应该对更改它们充满信心。

编辑:还请阅读Jeff对此答案的关于生产代码的评论。

票数 27
EN

Stack Overflow用户

发布于 2008-09-29 21:31:37

Obligatory.

这真的要归结为正则表达式。如果是这个庞大的整体表达式,那么是的,这是一个可维护性问题。如果你能简洁地表达它们(也许是通过分解它们),或者如果你有好的注释和工具来帮助你理解它们,那么它们就可以成为一个强大的工具。

票数 14
EN

Stack Overflow用户

发布于 2008-09-29 21:35:19

我不知道您使用的是哪种语言,但是Perl -例如-支持x标志,所以除非转义,否则正则表达式中的空格将被忽略,所以您可以将其分成几行,并对所有内容进行内联注释:

代码语言:javascript
运行
复制
$foo =~ m{
    (some-thing)          # matches something
    \s*                   # matches any amount of spaces
    (match another thing) # matches something else
}x;

这有助于使长正则表达式更具可读性。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/150764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档