String b = "<td width=\"200\">[a]</td><td>b</td><td>[c]</td>";
这样个字符串,我想把<td>和</td>之间有中括号包含的[]匹配,并且td可能有样式。
即结果是<td width=\"200\">[a]</td>和<td>[c]</td>两个,而不要<td>b</td>。

解决方案 »

  1.   

    <[^>]+>\[[^\/]+\]\s*<\/[^>]+>
      

  2.   

    可以用 replaceAll把<td>b</td>替换掉,然后再分拆。b.replaceAll("(<td>){1}(\\w|\\s)+(</td>){1}", "");
      

  3.   

               Matcher m=Pattern.compile("(?s)<td[^>]*?>[^\\[<>]*?\\[+.*?\\].*?</td>").matcher(" <td width=\"200\">[a] </td> <td>b </td> <td>[c] </td>");
               while(m.find())
                System.out.println(m.group());
      

  4.   


    import java.util.regex.*;public class Test48
    {
    public static void main(String... args) {
    String b = " <td width=\"200\">[a] </td> <td>b </td><td>b </td><td>b </td> <td>[c] </td>";
    //System.out.println(b.replace("(?<!\\[)b (?!\\])","")); Pattern p = Pattern.compile("(<td\\s?[^\\s]*?>\\[.*?\\]\\s*</td>)");
    Matcher m = p.matcher(b);
    while(m.find()) {
    System.out.println(m.group(0));
    }
    }
    }
      

  5.   

    <td[^>]*>\s*\[[^<\]]*\]\s*</td>
      

  6.   

    Java中确实是比较麻烦,.NET中就非常简单了String b = " <td width=\"200\">[a] </td> <td>b </td> <td>[c] </td><td> fdas[d]fdsfd[e]fdasfdsa </td>"; 
    String regex = "(?is)<td[^>]*>(?!(?:(?!\\[[^\\[\\]]*\\]).)*</td>)(?:(?!</?td\\b).)*</td>";         
    Matcher m=Pattern.compile(regex).matcher(b); 
    while(m.find())

        System.out.println(m.group());