在深奥的脚本语言中,我有类似的结构:
node % % % % % ... end
'%'字符代表一个标识符,但让我们暂时离开。我想在这里做的就是匹配每个'%',仅此而已。
在文本术语中:让我们匹配“节点”和“结束”分隔符之间的每个百分比。
我的猜测是:
(?<=node )(?:(?<= )%)+(?= end)
但不,它只匹配
中的单个'%'node % end
任何线索?
注意:语言是C#。所以“\ K”不起作用。重要条件 - 我需要纯匹配,我不能使用捕获组。这是解析器的限制,但如果没有捕获组就无法完成,我将被强制覆盖内置解析器并编写自己的解析器,但我仍然希望以某种方式避免它。
我需要这个表达式来显示编辑器中参数编号的提示。当您将鼠标光标放在“node ... end”编辑器中的第三个表达式时,将显示提示“P3”。实际代码将使用正则表达式匹配标识符“[^; \ r \ n] +”替换%,并使用“[; \ r \ n] +”替换空格。如果在没有使用捕获组的情况下无法在C#中完成,我只需要添加几行代码来手动选择提示范围。但它不会像单个正则表达式那样酷:)
答案 0 :(得分:1)
答案 1 :(得分:1)
我估计这不会有最佳性能,但除非你能提供更好的约束,否则你必须使用2 .*
个通配符(确保.
与新行不匹配) :
(?<=node.*)%(?=.*end)
编辑:根据http://www.regular-expressions.info/lookaround.html#limitbehind,.NET支持无限重复的后备,即使上面的正则表达式不是有效的PCRE(它会导致错误&#34; Lookbehinds需要为零宽度,因此不允许使用量词(&#34; )。
答案 2 :(得分:0)