正则表达式问题

mbh0210 2009-04-10 09:38:18
<[MultiRecords> qwewq
<[MultiRecords>

qwewqqwewq<[MultiRecords>

qwewq</MultiRecords]>

</MultiRecords]>
</MultiRecords]>
<[MultiRecords> qwewq
<[MultiRecords>

qwewqqwewq<[MultiRecords>

qwewq</MultiRecords]>

</MultiRecords]>
</MultiRecords]>
解析后的结果是1:<[MultiRecords> qwewq
<[MultiRecords>

qwewqqwewq<[MultiRecords>

qwewq</MultiRecords]>

</MultiRecords]>
</MultiRecords]>
2:<[MultiRecords> qwewq
<[MultiRecords>

qwewqqwewq<[MultiRecords>

qwewq</MultiRecords]>

</MultiRecords]>
</MultiRecords]>
我写的是<\[MultiRecords>((.|\n)*)<\/MultiRecords\]>,把所有的一次全部取出来了。不正确!
...全文
109 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
mbh0210 2009-04-10
  • 打赏
  • 举报
回复
谢谢各位啊。。。。
mbh0210 2009-04-10
  • 打赏
  • 举报
回复
谢谢各位啊。。。。
yooyoozoo 2009-04-10
  • 打赏
  • 举报
回复
观看 学习中
wuyi8808 2009-04-10
  • 打赏
  • 举报
回复
using System; 
using System.Text.RegularExpressions;

class A
{
static void Main()
{
string input = @"<[MultiRecords> qwewq
<[MultiRecords>

qwewqqwewq <[MultiRecords>

qwewq </MultiRecords]>

</MultiRecords]>
</MultiRecords]>
<[MultiRecords> qwewq
<[MultiRecords>

qwewqqwewq <[MultiRecords>

qwewq </MultiRecords]>

</MultiRecords]>
</MultiRecords]>";
string pattern = @"(?six)
<\[MultiRecords> # 头
(?>
[^<>]+
|
<\[MultiRecords>(?<Depth>)
|
</MultiRecords\]>(?<-Depth>)
)*
(?(Depth)(?!))
</MultiRecords\]> # 尾
";
int i = 0;
foreach (Match m in Regex.Matches(input, pattern))
{
Console.WriteLine("------ 第{0}个匹配 -------\n{1}\n", ++i, m);
}
}
}
/* 程序输出:
------ 第1个匹配 -------
<[MultiRecords> qwewq
<[MultiRecords>

qwewqqwewq <[MultiRecords>

qwewq </MultiRecords]>

</MultiRecords]>
</MultiRecords]>

------ 第2个匹配 -------
<[MultiRecords> qwewq
<[MultiRecords>

qwewqqwewq <[MultiRecords>

qwewq </MultiRecords]>

</MultiRecords]>
</MultiRecords]>
*/
keystudio 2009-04-10
  • 打赏
  • 举报
回复

"<[MultiRecords[^>]*>[^<>]*(((?'Open'<[MultiRecords[^>]*>)[^<>]*)+((?'-Open'</MultiRecords]>)[^<>]*)+)*(?(Open)(?!))</MultiRecords]>"
mbh0210 2009-04-10
  • 打赏
  • 举报
回复
2楼的结果是:<[MultiRecords> qwewq
<[MultiRecords>

qwewqqwewq<[MultiRecords>

qwewq</MultiRecords]>

<[MultiRecords> qwewq
<[MultiRecords>

qwewqqwewq<[MultiRecords>

qwewq</MultiRecords]>
少了</MultiRecords]>
</MultiRecords]> ,你用非贪婪的,所有没有这两个。
CeShenBeiWang 2009-04-10
  • 打赏
  • 举报
回复
mark
wuyi8808 2009-04-10
  • 打赏
  • 举报
回复
要最外层的,就要用到平衡组了。
LutzMark 2009-04-10
  • 打赏
  • 举报
回复
非贪婪循环一次,可以一次取一个的
string tmp;
foreach (Match match in Regex.Matches(NewsString, "(?i:src<\[MultiRecords>((.|\n)*) <\/MultiRecords\]>",RegexOptions.IgnoreCase))
{
tmp = match.Value;
//...
}
wuyi8808 2009-04-10
  • 打赏
  • 举报
回复
如果要取最内层的:
@"(?si)<\[MultiRecords>((?!<\[MultiRecords>).*?)<\/MultiRecords\]>"
mbh0210 2009-04-10
  • 打赏
  • 举报
回复
源字符串:
<[MultiRecords> qwewq
<[MultiRecords>

qwewqqwewq <[MultiRecords>

qwewq </MultiRecords]>

</MultiRecords]>
</MultiRecords]>
<[MultiRecords> qwewq
<[MultiRecords>

qwewqqwewq <[MultiRecords>

qwewq </MultiRecords]>

</MultiRecords]>
</MultiRecords]>


想要的结果是:1. <[MultiRecords> qwewq
<[MultiRecords>

qwewqqwewq <[MultiRecords>

qwewq </MultiRecords]>

</MultiRecords]>
</MultiRecords]>
2: <[MultiRecords> qwewq
<[MultiRecords>

qwewqqwewq <[MultiRecords>

qwewq </MultiRecords]>

</MultiRecords]>
</MultiRecords]>
wuyi8808 2009-04-10
  • 打赏
  • 举报
回复
@"(?s)<\[MultiRecords>(.*?)<\/MultiRecords\]>"
Roc_Lee 2009-04-10
  • 打赏
  • 举报
回复
想要的结果是什么?

110,549

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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