急!如何用正则表达式找出嵌套的table? <table title="123"> <tr> <td> <table> <tr> <td>内容</td> </tr> </table> </td> </tr> </table><table> <tr> <td>内容2</td> </tr> </table> 请问,如何用正则表达式找出title为“123”的table? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 其实这一类问题我已经在下面这个帖子里给出解决方案了,只不过没有多少人愿意去研究罢了【分享】正则平衡组应用场景分析及性能优化Regex reg = new Regex(@"(?is) <table(?:(?!title=).)*title=""123""[^>]*> #开始标记“<table...>” (?> #分组构造,用来限定量词“*”修饰范围 <table[^>]*> (?<Open>) #命名捕获组,遇到开始标记,入栈,Open计数加1 | #分支结构 </table> (?<-Open>) #狭义平衡组,遇到结束标记,出栈,Open计数减1 | #分支结构 (?:(?!</?table\b).)* #右侧不为开始或结束标记的任意字符 )* #以上子串出现0次或任意多次 (?(Open)(?!)) #判断是否还有'OPEN',有则说明不配对,什么都不匹配 </table> #结束标记“</table>” ", RegexOptions.IgnorePatternWhitespace);MatchCollection mc = reg.Matches(test);foreach (Match m in mc){ richTextBox2.Text += m.Value + "\n--------------------\n";}实际应用中可以把注释去掉目前没测试环境,楼主先测下吧 去了注释的Regex reg = new Regex(@"(?is)<table(?:(?!title=).)*title=""123""[^>]*>(?><table[^>]*>(?<Open>)|</table>(?<-Open>)|(?:(?!</?table\b).)*)*(?(Open)(?!))</table>");MatchCollection mc = reg.Matches(test);foreach (Match m in mc){ richTextBox2.Text += m.Value + "\n--------------------\n";} 过客正则就是厉害用<tr[^>]*>(?:(?:\s|\S)*?(?=<table|</tr>)(?(<table)<table[^>]*>(?:\s|\S)*?(?:</table>|(?:(?:<table[^>]*>(?:\s|\S)*?</table>(?:\s|\S)*?)*?</table>))(?:\s|\S)*?|))*</tr>试试 下拉列表SelectedIndexChanged事件 vb.net2005连接oracle10g出现ora-12514错误,大家帮忙看看 如何获得查询的值 简单问题! 如何一个页面控制另一页面刷新 最后10分,问一个asp.net+xml的问题 [馨郁星愿]如何用Datagird来完整的显示出整个月份日数并排列出来! 编译好的.dll文件放在站点外的其它文件夹,而当前站点的asp.net网页可以正常浏览,有没有办法实现? BoundColumn的问题 一个DataGrid列跟客户端的响应,并获得客户段数据的问题!! C#中验证码又一难题! cookies问题
【分享】正则平衡组应用场景分析及性能优化
Regex reg = new Regex(@"(?is)
<table(?:(?!title=).)*title=""123""[^>]*> #开始标记“<table...>”
(?> #分组构造,用来限定量词“*”修饰范围
<table[^>]*> (?<Open>) #命名捕获组,遇到开始标记,入栈,Open计数加1
| #分支结构
</table> (?<-Open>) #狭义平衡组,遇到结束标记,出栈,Open计数减1
| #分支结构
(?:(?!</?table\b).)* #右侧不为开始或结束标记的任意字符
)* #以上子串出现0次或任意多次
(?(Open)(?!)) #判断是否还有'OPEN',有则说明不配对,什么都不匹配
</table> #结束标记“</table>”
", RegexOptions.IgnorePatternWhitespace);
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n--------------------\n";
}实际应用中可以把注释去掉目前没测试环境,楼主先测下吧
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n--------------------\n";
}
用<tr[^>]*>(?:(?:\s|\S)*?(?=<table|</tr>)(?(<table)<table[^>]*>(?:\s|\S)*?(?:</table>|(?:(?:<table[^>]*>(?:\s|\S)*?</table>(?:\s|\S)*?)*?</table>))(?:\s|\S)*?|))*</tr>
试试