使用重复的子模式帮助缩短正则表达式

时间:2009-03-11 00:58:01

标签: regex

我在我正在处理的项目中生成了以下正则表达式,并且工作正常,但出于专业的好奇心,我想知道它是否可以“压缩/缩短”:

  /[(]PRD[)].+;.+;.*;.+;.+;.*;.*;.*;/

Regexes对我来说似乎总是巫毒......

3 个答案:

答案 0 :(得分:3)

对于初学者来说,单字符块可以消失:

/\(PRD\).+;.+;.*;.+;.+;.*;.*;.*;/

接下来,您可以将相关项目组合在一起:

/\(PRD\)(.+;){2}.*;(.+;){2}(.*;){3}/

但这实际上使文本更长。

答案 1 :(得分:3)

/\(PRD\)(.+;.+;.*;){2}(.*;){2}/

/\(PRD\)((.+;){2}.*;){2}(.*;){2}/

但可以说不那么棒了。两者都成功地短于

/[(]PRD[)].+;.+;.*;.+;.+;.*;.*;.*;/

虽然(如果只是因为字符类更改)。

或者你甚至可以选择

/\(PRD\)(.+;.+;.*;){2}.*;.*;/

可能是您使用相同规则获得的最短时间。

答案 2 :(得分:2)

/\(PRD\).+;.+;.*;.+;.+;(.*;){3}/

我认为你不会获得太多收益并达到同样的规则。如果你不在乎“;”之间的所有文字可选,然后你可以:

/\(PRD\)(.*;){8}/