HTML代码如下<div>{ id="a" /}</div>
<div>{ id="{ id="c" /}" /}</div>
我需要依次匹配{ id="a" /}、{ id="c" /}、{ id="{ id="c" /}" /},当有嵌套的情况时,需从里到外匹配,匹配成功时可将内容替换成别的字符。不知道表达得清不清楚,望各位不吝赐教~
<div>{ id="{ id="c" /}" /}</div>
我需要依次匹配{ id="a" /}、{ id="c" /}、{ id="{ id="c" /}" /},当有嵌套的情况时,需从里到外匹配,匹配成功时可将内容替换成别的字符。不知道表达得清不清楚,望各位不吝赐教~
private void getNesting(string src, Regex reg, List<string> list)
{ MatchCollection mc = reg.Matches(src); foreach (Match m in mc)
{ list.Add(m.Value); src = m.Value.Remove(m.Value.Length - 1, 1); if (reg.IsMatch(src))
{ getNesting(src, reg, list); } } }string tempStr = File.ReadAllText(@"C:\Documents and Settings\Administrator\桌面\Test.txt", Encoding.GetEncoding("GB2312"));//读取txt
string pattern = @"\{((?<Open>\{)|(?<-Open>\})|[\s\S])*?(?(Open)(?!))\}";
Regex reg = new Regex(pattern);
List<string> list = new List<string>();
getNesting(tempStr, reg, list);
/*
* [0] "{ id=\"a\" /}" string
[1] "{ id=\"{ id=\"c\" /}\" /}" string
[2] "{ id=\"{ id=\"c\" /}" string */
1:{ id='a' /}
2:{ id='{ id='c' }' /}
3:{ id='{ id='c' }
第3个不对,应该是{ id='c'};
string pattern = @"(?i)\{(?>[^{}]+|\{(?<o>)|\}(?<-o>))*(?(o)(?!))\}";