C# 具有特殊字符的正则表达式嵌套结构
我需要在C#中找到一个正则表达式,它匹配并返回由$(and)$分隔的嵌套结构中的字符串 我的输入字符串是:C# 具有特殊字符的正则表达式嵌套结构,c#,.net,regex,string,parsing,C#,.net,Regex,String,Parsing,我需要在C#中找到一个正则表达式,它匹配并返回由$(and)$分隔的嵌套结构中的字符串 我的输入字符串是: $(string1$(string2)$sometexthere$(string3$(string4)$texttext)$anothertext)$ 输出必须是: $(string1$(string2)$sometexthere$(string3$(string4)$texttext)$anothertext)$ $(string2)$ $(string3$(string4)$textt
$(string1$(string2)$sometexthere$(string3$(string4)$texttext)$anothertext)$
输出必须是:
$(string1$(string2)$sometexthere$(string3$(string4)$texttext)$anothertext)$
$(string2)$
$(string3$(string4)$texttext)$
$(string4)$
我尝试过使用这个正则表达式\$\([^\$]*\)\$
,但它只返回最内部的string2
和string4
是否有一个解决方案可以返回每个匹配的正则表达式?或者甚至通过一个循环?($(
和)$
可以在后面替换为[
和]
)您可以使用
(?=(?<result>\$\((?>[^()]+|(?<o>\()|(?<-o>\)))*(?(o)(?!))\)\$))
看
图案细节
-一个积极的前瞻,将启用重叠匹配:(?=
-组“结果”:(?\$\((?>[^()]+\(?\())*(?(o)(?!)\)\$)
-\$\(
子字符串$(
-1+字符,而不是(?>[^()]+|(?\()(?\))*
和(
或)
推到“o”组堆栈或(
从“o”组堆栈弹出,0次或更多次)
-如果组“o”堆栈不为空,则匹配失败的条件(?(o)(?!)
-a\)\$
子字符串)$
-前瞻的结束)
var pattern = @"(?=(?<result>\$\((?>[^()]+|(?<o>\()|(?<-o>\)))*(?(o)(?!))\)\$))";
var results = Regex.Matches(text, pattern)
.Cast<Match>()
.Select(x => x.Groups["result"].Value)
.ToList();