Regex 正则表达式不捕获动态组

Regex 正则表达式不捕获动态组,regex,Regex,我有以下字符串: //长度不是固定的。用户可以附加更多管道功能。 {{some:name | fn:some-function'ay'| fn:defaultsome:name | some:other} 目的是获得一个数组: 数组[0]//some:name 数组[1]//fn:some-function'ay' 数组[2]//fn:defaultsome:name 数组[4]//some:other //等等 这就是我到目前为止所做的: ^\{2}:[^\\\\]+\s\\\*\s*[^\\

我有以下字符串:

//长度不是固定的。用户可以附加更多管道功能。 {{some:name | fn:some-function'ay'| fn:defaultsome:name | some:other} 目的是获得一个数组:

数组[0]//some:name 数组[1]//fn:some-function'ay' 数组[2]//fn:defaultsome:name 数组[4]//some:other //等等 这就是我到目前为止所做的:

^\{2}:[^\\\\]+\s\\\*\s*[^\\\^\}]+\}{2}$ //它吐出: //完全匹配:{{thing:name | fn:substring在“:”|fn:defaultthing:name | some:other} //第1组:fn:defaultthing:name //第2组:一些:其他
您的正则表达式不起作用,因为如果您用*或+,量化一个组,则只有最后一次重复才会放入该组。所有其他的都将被丢弃

与其查找一个完整的匹配项,不如查找多个匹配项,每个匹配项都是数组的一个元素

例如,您可以使用

(?:{{|\|)\s*([^|{}]+?)(?=\s*?(?:\||}}))
并在每场比赛中获得第1组

说明:

比赛将以{{{或|?}开始:{{|\| 将您想要的内容匹配到第1组[^{}]+? 向前看一个|或}?=\s*?:\|}
正则表达式引擎通常不支持每个捕获组的捕获堆栈。如果将+或*量词设置为捕获组,则只有最后一次捕获将保留在捕获组内存缓冲区中。在.NET、Python PyPi正则表达式模块和Boost中,这是可能的,但在您的正则表达式引擎中,这似乎是不可能的。使用多重加工或两次传递方法提取完整的重复子字符串,然后使用编程语言提供的字符串拆分方法进行拆分。