public class TdMatcher { public static void main(String[] args) { String html = ""; html += "<table>"; html += "<tr>"; html += "<td>message</td>"; html += "<td colspan='2'>message2</td>"; html += "<td >message3</td>"; html += "</tr>"; html += "</table>"; String[] matcher = matcher(html); for (int i = 0; i < matcher.length; i++) { System.out.println(matcher[i]); } }
private static String[] matcher(String html) { Pattern pattern = Pattern.compile("<td( .*?)?>.*?</td>"); Matcher matcher = pattern.matcher(html); List<String> list = new ArrayList<String>(); while (matcher.find()) { list.add(matcher.group()); } return list.toArray(new String[0]); } }
追问
.*? 用了你的这个正则是可以截取到可是突然发现里面嵌套着,这样就产生的冲突,有好的方法解决么
追答
那得换个思路,你想只截取最外围的td,还是内部嵌套的也要截取。
追问
我想截取内部的tb
追答
稍等,我想一下。
情℃梦杀次
2024-05-02 14:04:00
// 这是你的HTML内容 String str = "<tr><td>abc</td><td>def</td><tr>"; // 这是正则表达式 String p = "(<td[^>]*>[^<]*</td>)"; Pattern pt = Pattern.compile(p); Matcher m = pt.matcher(str); while (m.find()) { // 输出匹配的内容 System.out.println(m.group(1)); }