正则表达式 匹配DIV标签! 会的来 ,急急急 <div id="a">里面嵌套的也有div</div>现在想取指定id的div中的所有内容。求一个匹配的正则。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //或许,可以这样用var content=document.getElementById("a").innerHTML; 我做的是winform啊winform里怎么写js啊我不会 who can help me? 刚搜了下看到一个匹配div的正则,可不是指定的:<div[^>]*>[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>. <div[^>]*>[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>这个可以抓取一些div但是不是我指定的div中的内容啊 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" }; /* TODO : 这里发挥 */ 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(); 借用一下, string input = @"<div id=""a"">AAA<div id=""b"">BB<div id=""c"">CCC</div> B</div> </div> "; string id = Console.ReadLine(); //输入要取得div的id while (id.Trim().ToUpper().CompareTo("G")!=0) { string pattern = @"<div id=""" + id + @""">[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>"; Console.WriteLine(Regex.Match(input, pattern)); id = Console.ReadLine(); } 这就不是正则的问题了,一般正则搞不定。最好多HTML解析,然后一层层的找。 string id = "test"; string testStr = @"SDSD<DIV><div id=""test"">000<div>里面嵌套的也有div </div>5464<div>898hjgjh</div>SFSFfg</div>SFSFfgh756<div>dd</div> "; string result = ""; StringBuilder sb=new StringBuilder() ; Regex objRegex1 = new Regex(@"(<div\s+id=(['""])\s*"+id+@"\s*\2[^>]*>)", RegexOptions.IgnoreCase); Regex objRegex2 = new Regex(@"<div[^>]*>", RegexOptions.IgnoreCase); Regex objRegex3 = new Regex(@"</div>",RegexOptions.IgnoreCase); if (objRegex1.IsMatch(testStr)) { string strMatch =objRegex1.Match(testStr).Value; string tmpStr = objRegex1.Replace (testStr.Substring(testStr.IndexOf(strMatch)),""); MatchCollection objMatchs1 = objRegex2.Matches(tmpStr); MatchCollection objMatchs2 = objRegex3.Matches(tmpStr); int k = objMatchs1.Count >= objMatchs2.Count - 1 ? objMatchs2.Count - 1 : objMatchs1.Count; Response.Write(Server.HtmlEncode(string.Format("K : {0}", k))); Response.Write(@"<br />"); Response.Write(Server.HtmlEncode(string.Format("tmpStr : {0}", tmpStr))); Response.Write(@"<br />"); int divStart = 0, divEnd = 0; int EndDivCount = 1; string divEndMarkup = ""; for (int i = 0; i < k; i++) { divStart = tmpStr.IndexOf(objMatchs1[i].Value ); divEnd = tmpStr.IndexOf(objMatchs2[i].Value); if (divStart < divEnd) { EndDivCount++; divEndMarkup = objMatchs2[i].Value; divEnd = tmpStr.IndexOf(divEndMarkup); sb.AppendFormat("{0}", tmpStr.Substring(0, divEnd)); sb.AppendFormat("{0}", divEndMarkup); tmpStr = tmpStr.Substring(divEnd + divEndMarkup.Length); } else { --EndDivCount; break; } } divEndMarkup = objMatchs2[k].Value; divEnd = tmpStr.IndexOf(divEndMarkup); sb.AppendFormat("{0}", tmpStr.Substring(0, divEnd)); result = sb.ToString(); } 上面的代码去掉 Response.Write(Server.HtmlEncode(string.Format("K : {0}", k))); Response.Write(@"<br />"); Response.Write(Server.HtmlEncode(string.Format("tmpStr : {0}", tmpStr))); Response.Write(@"<br />"); 未将对象引用设置到对象的实例 小问题,就是找不到,大家帮我看看哪里的问题!? 那位使用过WebClient.DownLoadFile(string,string)下载文件,请帮我解决一下一个问题 求C#制作学生成绩管理系统 源码 FORM右上角关闭无效,为什么失效?如何手动修改 一个小问题,在线等,请大家来指点一下 帮忙看一下下面的程序 请问我的数据库中的表为什么不能修改?有哪些原因啊?谢谢! 急需Visual Studio .NET 2003 简体中文版中Library CD3 里的一个文件,有的请发给我 请帮帮忙!!! c#关于数据库更新的问题 编码问题
//或许,可以这样用
var content=document.getElementById("a").innerHTML;
winform里怎么写js啊
我不会
who can help me?
这个可以抓取一些div但是不是我指定的div中的内容啊
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" }; /* TODO : 这里发挥 */
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();
借用一下, string input = @"<div id=""a"">AAA<div id=""b"">BB<div id=""c"">CCC</div> B</div> </div> ";
string id = Console.ReadLine(); //输入要取得div的id
while (id.Trim().ToUpper().CompareTo("G")!=0)
{
string pattern = @"<div id=""" + id + @""">[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>";
Console.WriteLine(Regex.Match(input, pattern));
id = Console.ReadLine();
}
最好多HTML解析,然后一层层的找。
string id = "test";
string testStr = @"SDSD<DIV><div id=""test"">000<div>里面嵌套的也有div </div>5464<div>898hjgjh</div>SFSFfg</div>SFSFfgh756<div>dd</div> "; string result = "";
StringBuilder sb=new StringBuilder() ;
Regex objRegex1 = new Regex(@"(<div\s+id=(['""])\s*"+id+@"\s*\2[^>]*>)", RegexOptions.IgnoreCase);
Regex objRegex2 = new Regex(@"<div[^>]*>", RegexOptions.IgnoreCase);
Regex objRegex3 = new Regex(@"</div>",RegexOptions.IgnoreCase); if (objRegex1.IsMatch(testStr)) {
string strMatch =objRegex1.Match(testStr).Value;
string tmpStr = objRegex1.Replace (testStr.Substring(testStr.IndexOf(strMatch)),""); MatchCollection objMatchs1 = objRegex2.Matches(tmpStr);
MatchCollection objMatchs2 = objRegex3.Matches(tmpStr); int k = objMatchs1.Count >= objMatchs2.Count - 1 ? objMatchs2.Count - 1 : objMatchs1.Count; Response.Write(Server.HtmlEncode(string.Format("K : {0}", k)));
Response.Write(@"<br />"); Response.Write(Server.HtmlEncode(string.Format("tmpStr : {0}", tmpStr)));
Response.Write(@"<br />");
int divStart = 0, divEnd = 0;
int EndDivCount = 1;
string divEndMarkup = ""; for (int i = 0; i < k; i++) {
divStart = tmpStr.IndexOf(objMatchs1[i].Value );
divEnd = tmpStr.IndexOf(objMatchs2[i].Value);
if (divStart < divEnd)
{
EndDivCount++; divEndMarkup = objMatchs2[i].Value;
divEnd = tmpStr.IndexOf(divEndMarkup); sb.AppendFormat("{0}", tmpStr.Substring(0, divEnd));
sb.AppendFormat("{0}", divEndMarkup);
tmpStr = tmpStr.Substring(divEnd + divEndMarkup.Length); }
else {
--EndDivCount;
break;
}
} divEndMarkup = objMatchs2[k].Value;
divEnd = tmpStr.IndexOf(divEndMarkup); sb.AppendFormat("{0}", tmpStr.Substring(0, divEnd)); result = sb.ToString();
}
Response.Write(@"<br />"); Response.Write(Server.HtmlEncode(string.Format("tmpStr : {0}", tmpStr)));
Response.Write(@"<br />");