Regex 与分隔块内的每个参数匹配的表达式

Regex 与分隔块内的每个参数匹配的表达式,regex,Regex,在深奥的脚本语言中,我有如下结构: node % % % % % ... end “%”字符表示一个标识符,但我们暂时不使用它。我只想在这里匹配每个“%”而已 在文本术语中:让我们匹配“节点”和“结束”分隔符之间的每个百分比 我的猜测是: (?<=node )(?:(?<= )%)+(?= end) 有什么线索吗 注:语言为C#。所以“\K”不起作用。重要条件-我需要纯匹配,我不能使用捕获组。这是解析器的一个限制,但如果没有捕获组就无法完成,我将被迫重写内置解析器并编写自己的解析

在深奥的脚本语言中,我有如下结构:

node % % % % % ... end
“%”字符表示一个标识符,但我们暂时不使用它。我只想在这里匹配每个“%”而已

在文本术语中:让我们匹配“节点”和“结束”分隔符之间的每个百分比

我的猜测是:

(?<=node )(?:(?<= )%)+(?= end)
有什么线索吗

注:语言为C#。所以“\K”不起作用。重要条件-我需要纯匹配,我不能使用捕获组。这是解析器的一个限制,但如果没有捕获组就无法完成,我将被迫重写内置解析器并编写自己的解析器,但我仍然希望能够以某种方式避免


我需要这个表达式在编辑器中显示参数编号的提示。当您将鼠标光标放在“node…end”编辑器中的第三个表达式上时,编辑器将显示提示“P3”。实际代码将用正则表达式匹配标识符“[^;\r\n]+”替换%,并用“[;\r\n]+”替换空格。如果不使用捕获组就无法在C#中完成,我只需要添加几行代码来手动选择提示的范围。但是它并没有单个正则表达式那么酷:)

放弃后面的查找
(?像下面这样更改您的正则表达式,以匹配
节点
结束
之间的所有
%

(?:node|(?<!^)\G)[^%]*\K%(?=.*?end)
(?:节点|)(?)?

我想这不会有最好的性能,但是除非您能够提供更好的约束,否则您必须使用2个
*
通配符(确保
与新行不匹配):


(?你使用什么工具/语言?你如何知道OP使用的是什么语言?在编写上述正则表达式语法时,这是一个非常重要的问题。我忘了(再次)提到.C。它看起来很糟糕,因为它不知道“\K”。我甚至用“\K”做了一些尝试以前。恐怕不是这样。它也匹配空格,并捕获组。我需要纯匹配。黑客发明这样的东西是需要的!:)谢谢。
(?<=node)( %)+(?= end)
(?:node|(?<!^)\G)[^%]*\K%(?=.*?end)
(?<=node.*)%(?=.*end)