static void Main(string[] args)
{
string str = "<div>111<div>111_1</div>111</div><div>test000000</div>";
Regex reg=new Regex(@"<div>.*\r*\n*\s*<div>");
MatchCollection mc=reg.Matches(str);
foreach(Match m in mc)
{
Console.WriteLine(m.Value);
}
Console.ReadKey();
}
我想匹配
<div>111<div>111_1</div>111</div>
即对于有嵌套的,匹配最外层的
<div>test000000</div>
没嵌套的就直接匹配出来
{
string str = "<div>111<div>111_1</div>111</div><div>test000000</div>";
Regex reg=new Regex(@"<div>.*\r*\n*\s*<div>");
MatchCollection mc=reg.Matches(str);
foreach(Match m in mc)
{
Console.WriteLine(m.Value);
}
Console.ReadKey();
}
我想匹配
<div>111<div>111_1</div>111</div>
即对于有嵌套的,匹配最外层的
<div>test000000</div>
没嵌套的就直接匹配出来
只有一组。
我要的是把上面的字符串
<div>111 <div>111_1 </div>111 </div> 这是一个满足条件的正则匹配结果
<div>test000000 </div>这又是一个满足条件的结果。
//像下面的:
Regex reg=new Regex(@"^<div>.*<\/div>$" ); Regex reg=new Regex(@"^<div><div>.*<\/div><\/div>$" );
reg=new Regex(@"^<div>.*<\/div>$" ); var my=/^<div>.*<div>.*<\/div><\/div>$/ //这个才符合你要的
string str = "<div>111 <div>111_1 <div>111_2 <div>111_3 </div>111_2 </div>111_1 </div>111 </div> <div>test000000 </div>";
Regex re = new Regex("(?i)<div>[^<]*(<div>[^<]+)*(</div>[^<]+)*</div>");
Match m = re.Match(str);
While(m.Success)
{
Console.WriteLine(m.Value);
m = m.NextMatch();
}
// 结果 :<div>111 <div>111_1 <div>111_2 <div>111_3 </div>111_2 </div>111_1 </div>111 </div> 和 <div>test000000 </div>
Regex reg=new Regex(@^<div>.*<div>.*<\/div>.*<\/div>$"); //这个才符合你要的
//按照以上思路楼主可以随意改动
Regex reg=new Regex(@"^<div>.*<div>.*<\/div>.*<\/div>$");
reg=new Regex(@"^<div>.*<\/div>$" ); //这样的话,无论你有多少层都匹配
/* 这样会匹配整个的字符串 如<div>111 <div>111_1 </div>111 </div> <div>test000000 </div>
而不是楼主所要的<div>111 <div>111_1 </div>111 </div> 和 <div>test000000 </div> */
//如果有这样<div>kk<div>111</div>222</div>的形式的话 ,再改一下,
Regex reg=new Regex(@^<div>.*<div>.*<\/div>.*<\/div>$"); //这个才符合你要的
//按照以上思路楼主可以随意改动
/* 虽然可以随意改动 但是如果不知道到底有多少层呢? */
//楼主说 :即对于有嵌套的,匹配最外层的 …还有下面的这个正则…思路不错,不过存在
错误,至少转义符号都没有…
Regex re = new Regex("(?i)<div>[^<]*(<div>[^<]+)*(</div>[^<]+)*</div>");
哈哈 你很细心
不过不转义也不会错
当然了 要是在JavaScript中就必须转义了 因为 JavaScript中正则可以这样表示 /<div>[^<]*(<div>[^<]+)*(<\/div>[^<]+)*<\/div>/gi
其实我的代码里的 while 写错了 应该小写
//呵呵下面的多了个.*这样子才会通配<div>000 <div>111_1 </div>111 </div> 里面的000Regex reg=new Regex(@"<div>.*[^<]*(<div>[^ <]+)*( <\/div>[^ <]+)*<\/div>")
而这个<div>[^ <]*…匹配的是<div><div>000…,不是<div>000<div>…吧。