请问正则如何去掉嵌套的TABLE? 上一个帖子学明白了,又遇到这个问题,有时后TABLE是嵌套的,所以“(?is)<table。*?</table>”就不灵了~~我自己瞎写了一个“(?i)<table?=(<table.*?</table>)?</table>”,跟本就不好使,我也不知道我错在哪里了,还请大侠们指点一下~~谢谢了~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 比如:<table><tr><td> <table> <tr> <td></td> </tr> </table></td></tr></table> import java.util.regex.*;public class Test{ public static void main(String args[]) { String str="<table>\n" +"<tr> \n" +"<td> \n" +"<table> \n" +"<tr> \n" +"<td> </td> \n" +"</tr>\n" +"</table> \n" +"</td> \n" +"</tr> \n" +"</table>\n"; String regex="(?is)(?:<table>.*?)+?(?:</table>.*?)+"; //这个正则不能判断嵌套是否正确. System.out.println(str.matches(regex)); }} "(?is)(?:<table>.*?)+?(?:</table>.*?)+"(?is)是设置匹配时的模式是DOTALL且忽略大小写。(?:)表示是非捕获组,用了能提高一些效率,不用也可以,详见火龙果的说明。如果不用就成了:"(?is)(<table>.*?)+?(</table>.*?)+"(<table>.*?)+?用来匹配<table>后根一串任意字符组成的组,这样的组有1到多个。其中的?叫Reluctant的量词,表示是一点点的匹配,一般用来取最小的匹配结果。详见火龙果的帖子:http://topic.csdn.net/u/20080325/17/fb7a3e8d-029a-4d8e-89ae-77a9d28ec301.html中的34楼的回答。(</table>.*?)+不用解释了吧。 回bigbug9002,这个表达式看得懂,但不明白为什么这样写会匹配嵌套的<table>,能否再讲解写一下,还有为什么你说不能确定嵌套是否正确?谢谢了~~ (?:<table>.*?)这个把第一个<table>给非捕获了。 m.find()如果为真直接取substring就行了吧 匹配嵌套的<table>不是非常明显吗?若干个<table>与最近的若干个</table>.这个正则就是匹配这样的东西的。之所以说不能确定嵌套是否正确就是因为是“若干个”,而不能确定具体的数目是多少。 请人帮我把查询结果直接放到主界面! 一个关于VECTOR的用法错误,或者是java思想上的错误,请大家帮忙 大家好,我以前连接过SQL SERVER数据库,现在转ORACLE了,该怎么做 一个简易计算器的问题,求大仙们帮帮忙 java 打印api 令人厌烦的问题 再次求助将十六进制文件转成十进制 线程可不可以在线程内部终止自己? 一个简单的程序到底错在哪? java socket问题 求教“java内存泄漏问题,最好提供实例代码” 如何不通过集成环境编译JDBC程序(使用Oracle9i)???
<table>
<tr>
<td> <table>
<tr>
<td></td>
</tr>
</table></td>
</tr>
</table>
public static void main(String args[]) {
String str="<table>\n"
+"<tr> \n"
+"<td> \n"
+"<table> \n"
+"<tr> \n"
+"<td> </td> \n"
+"</tr>\n"
+"</table> \n"
+"</td> \n"
+"</tr> \n"
+"</table>\n";
String regex="(?is)(?:<table>.*?)+?(?:</table>.*?)+"; //这个正则不能判断嵌套是否正确.
System.out.println(str.matches(regex));
}
}
(?is)是设置匹配时的模式是DOTALL且忽略大小写。
(?:)表示是非捕获组,用了能提高一些效率,不用也可以,详见火龙果的说明。
如果不用就成了:
"(?is)(<table>.*?)+?(</table>.*?)+"
(<table>.*?)+?用来匹配<table>后根一串任意字符组成的组,这样的组有1到多个。
其中的?叫Reluctant的量词,表示是一点点的匹配,一般用来取最小的匹配结果。
详见火龙果的帖子:
http://topic.csdn.net/u/20080325/17/fb7a3e8d-029a-4d8e-89ae-77a9d28ec301.html
中的34楼的回答。(</table>.*?)+不用解释了吧。
匹配嵌套的<table>不是非常明显吗?若干个<table>与最近的若干个</table>.这个正则就是匹配这样的东西的。之所以说不能确定嵌套是否正确就是因为是“若干个”,而不能确定具体的数目是多少。