在论坛上看到过几次这样的问题,就写了点放到这里吧 :)
Java的正则引擎(java.util.regex)做不到未知层次递归匹配,再说这个用正则效率不会高,所以考虑其他方法实现。对于.Net平台,可尝试一下这个正则:^[^<>]*(?:<(?!/)(?<o>[^/s<>]+)(?:/s[^<>]*)?(?:(?<-o>/>)|>)[^<>]*|(?<-o><//k<o>>[^<>]*))*(?(o)(?!))$ (若闭合返回true,否则返回false。不会忽略单双引号之间的内容,标签也不可以交叉)
如果要求严格可用xml方式验证,如<div id="test"name="test2"></div>(属性间没空格)等是不能通过的。如果不需要这么严格则可试一下下面的方法(忽略单双引号之间的内容,标签可以交叉):
若用ArrayList存放提取出来的标签效率不佳,就自己写一个TagsList,如下:


























































