Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用重复的子模式帮助缩短正则表达式_Regex - Fatal编程技术网

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

Regex 使用重复的子模式帮助缩短正则表达式,regex,Regex,我在正在进行的一个项目中生成了以下正则表达式,它工作得很好,但出于职业好奇心,我想知道它是否可以“压缩/缩短”: Regexes对我来说总是像巫毒一样 对于初学者,单字符块可能会消失: /\(PRD\).+;.+;.*;.+;.+;.*;.*;.*;/ 接下来,您可以将相关项目分组在一起: /\(PRD\)(.+;){2}.*;(.+;){2}(.*;){3}/ 不过,这实际上使它的文本长度更长 /\(PRD\).+;.+;.*;.+;.+;(.*;){3}/ 我认为你不会得到太多,也不会

我在正在进行的一个项目中生成了以下正则表达式,它工作得很好,但出于职业好奇心,我想知道它是否可以“压缩/缩短”:


Regexes对我来说总是像巫毒一样

对于初学者,单字符块可能会消失:

/\(PRD\).+;.+;.*;.+;.+;.*;.*;.*;/
接下来,您可以将相关项目分组在一起:

/\(PRD\)(.+;){2}.*;(.+;){2}(.*;){3}/
不过,这实际上使它的文本长度更长

/\(PRD\).+;.+;.*;.+;.+;(.*;){3}/
我认为你不会得到太多,也不会达成同样的规则。如果您不想让“;”之间的所有文本都是可选的,那么您可以:

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

/\(PRD\)((.+;){2}.*;){2}(.*;){2}/
/[(]PRD[)].+;.+;.*;.+;.+;.*;.*;.*;/
但可以说不那么可怕。两者都成功地缩短了时间

/\(PRD\)((.+;){2}.*;){2}(.*;){2}/
/[(]PRD[)].+;.+;.*;.+;.+;.*;.*;.*;/
虽然(如果只是因为角色类的更改)

或者你甚至可以和我一起去

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

使用相同的规则,哪一种可能是最短的。

您想要的确切模式是什么?e、 匹配结果集是什么样子的?是的,如果问题是“精确匹配这个正则表达式匹配的内容”,那么很难对其进行压缩。约翰非常擅长更优雅的方法。一些匹配内容的示例会有很大帮助。由于每次“.”都应该是“[^;]”,因此重写会变得短很多—比如比修改后的原始内容短15个字符。也可能有人认为“(…)”序列应该是“(?:…)”(非捕获分组)因为原始文件中没有任何捕获。还有一种观点认为,原版可能想要分组,但接下来的问题是,是否最好在“;”上进行拆分+1.使用相同的规则-现在,如果你稍微改变一下规则…:)