这种如何用正则表达式

zenjj 2009-05-22 04:49:02


if()
{
11111
if()
{
2222
if()
{
3333
}
}
}

if()
{
44444
if()
{
55555
if()
{
66666
}
}
}

考虑的n个嵌套,获取每一个{}里的字符,那位前辈能取出来!!!!
...全文
85 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zenjj 2009-05-23
  • 打赏
  • 举报
回复
12楼是不错
zouzedong 2009-05-22
  • 打赏
  • 举报
回复
`` 顶12楼的
路人乙e 2009-05-22
  • 打赏
  • 举报
回复
收藏过一个正则,谁写的忘了


//通过ID处理嵌套HTML标签

string html = @"
<html>
<body>
<div id=""div1"">
<div id=""div2"" style=""background:Red;"">
<div id=""div3"">
<table id=""table1"">
<tr>
<td>
<div id=""div4"" style=""width:100px""></div>
</td>
</tr>
</table>
</div>
</div>
<div id=div5>
<a href=""http://www.csdn.net"">csdn</a>
</div>
</div>
<img src=""http://www.csdn.net/Images/logo_csdn.gif""/>
</body>
</html>";
Console.WriteLine(html);
string[] idList = { "div1", "div2", "div3", "div4", "table1", "div5", "abc(def" };

string pattern = @"<([a-z]+)(?:(?!id)[^<>])*id=([""']?){0}\2[^>]*>(?>(?<o><\1[^>]*>)|(?<-o></\1>)|(?:(?!</?\1).))*(?(o)(?!))</\1>";

foreach (string id in idList)
{
Match match = Regex.Match(html, string.Format(pattern, Regex.Escape(id)),
RegexOptions.Singleline | RegexOptions.IgnoreCase);
Console.WriteLine("--------begin {0}--------", id);
if (match.Success)
Console.WriteLine(match.Value);
else
Console.WriteLine("o(╯□╰)o");
Console.WriteLine("--------end {0}--------", id);
}
Console.ReadLine();
zenjj 2009-05-22
  • 打赏
  • 举报
回复
6楼的做法挺好的
zenjj 2009-05-22
  • 打赏
  • 举报
回复
是啊
wackyboy 2009-05-22
  • 打赏
  • 举报
回复

string str = @"if(a)
{
11111
if(b)
{
2222
if(c)
{
3333
}
}
}

if(d)
{
44444
if(e)
{
55555
if(d)
{
66666
}
}
}
";
string ifExp = "a";
string pattern = @"if\(" + ifExp + @"\)\s*\{.*?(((?'Open'if\([^\)]*\)\s*\{)[^\{\}]*)+((?'-Open'\}).*?)+)*(?(Open)(?!))\}"
//前提是 if中只有if嵌套,不能有别的{}, 而且if中不能再有(),可以通过改变if当中的条件ifExp来确定要取得是哪个if
wszhoho 2009-05-22
  • 打赏
  • 举报
回复
顶下,看楼下。
LutzMark 2009-05-22
  • 打赏
  • 举报
回复
找到第个},把}替换为n-1#,以此类推直到找到1#
LutzMark 2009-05-22
  • 打赏
  • 举报
回复
我的思路是
匹配{,
找到第一个{替换为1@,
以此类推再找到{替换为 2@ 3@..n@
直到找到第一个},把}替换为n#,
找到第一个},把}替换为n-1#,以此类推直到找到1#

就lz例子来说,
找到第一个{替换为1@
找到第二个{替换为2@
找到第三个{替换为3@

找到第一个}替换为3#
找到第二个}替换为2#
找到第三个}替换为1#

得到匹配数组,然后再递归过滤就能得到{}之间的字符
zenjj 2009-05-22
  • 打赏
  • 举报
回复
要个简单的例子
HDNGO 2009-05-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wackyboy 的回复:]
平衡组
[/Quote]

这玩意儿一直没搞明白~~写一会儿就晕进去了~
zenjj 2009-05-22
  • 打赏
  • 举报
回复
给个例子来看看
wackyboy 2009-05-22
  • 打赏
  • 举报
回复
平衡组
xingzhiasa 2009-05-22
  • 打赏
  • 举报
回复
坐等高人……

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧