regex – 如何写更可维护的正则表达式?

我开始觉得使用正则表达式会降低代码的可维护性。正则表达式的简洁和力量是有害的。 Perl化合物这种副作用像默认操作符。

我有一种习惯,记录正则表达式,至少有一个句子给出基本意图和至少一个例子。

因为正则表达式被构建,我觉得绝对必要评论表达式中每个元素的最大成分。尽管这样,即使我自己的正则表达式让我抓我的头,好像我正在读克林贡。

你有意地贬低你的正则表达式吗?你能把更短,更强的分解成更简单的步骤吗?我放弃了嵌套正则表达式。是否有正则表达式构造,你避免由于可维护性问题?

不要让这个例子云问题。

如果下面的Michael Ash有某种错误,你会有任何前景做任何事情,但抛弃它完全?

^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[13-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$

每个请求的确切目的可以使用Ash先生的链接上面找到。

匹配01.1.02 | 11-30-2001 | 2/29/2000

非比赛02/29/01 | 13/01/2002 | 11/00/02

我通常只是试图将所有我的正则表达式调用包装在自己的函数中,有一个有意义的名称和一些基本的注释。我喜欢把正则表达式看作是一种只写的语言,只有编写它的人才能读取(除非它很简单)。我完全期望有人需要可能完全重写表达式,如果他们必须改变其意图,这可能是更好地保持正则表达式训练活着。

相关文章

一、校验数字的表达式 1 数字:^[0-9]*$ 2 n位的数字:^d{n}$ 3 至少n位的数字:^d{n,}$ 4 m-n位的数字...
正则表达式非常有用,查找、匹配、处理字符串、替换和转换字符串,输入输出等。下面整理一些常用的正则...
0. 注: 不同语言中的正则表达式实现都会有一些不同。下文中的代码示例除特别说明的外,都是使用JS中的...
 正则表达式是从信息中搜索特定的模式的一把瑞士军刀。它们是一个巨大的工具库,其中的一些功能经常...
一、校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数...
\ 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,“n”匹配字符“n”。“\n...