str.replaceAll("<[\\w/]+?>", " ")

解决方案 »

  1.   

    <sdf234>有这样的也是我要的,不是html标签怎么搞?
      

  2.   

    str.replaceAll("<[a-z/]+?>", " ")
      

  3.   

    <dsf>不也去掉了嘛,html标签就用【a-z】就行了?这样肯定不行了,而且这些标签后面还有用不能干掉
      

  4.   

    楼主这个标签里的内容又有标签这个要取去除标签的内容不仅要搜索匹配还要进行持续性的替换String str="<u>sdf<i>ewr<b>3<4</b>43>24</i>234<>234</u>";
    Pattern p=Pattern.compile("<(\\w+)>(.*?)</\\1>");
    Matcher m=p.matcher(str);
    if(m.find()){
      str=m.group(2);//得到标签的内容
    //利用while循环如果内容中还有标签,把标签去掉只保留内容,直到剩下纯文本
      while(str.matches(".*<(\\w+)>(.*?)</\\1>.*")){
        str=str.replaceAll("<(\\w+)>(.*?)</\\1>"," $2 ");
      }
      System.out.println(str);
    }
      

  5.   

    嗯,这样能取到,只是还有点问题。。其实最终我想得到是把u标签之间非html标签都加上u标签,也就是这样:"<u>sdf</u><i><u>ewr</u><b><u>3<4</u></b><u>43>24</u></i><u>234<>234</u>",也就是取到这样的值后分别加上u标签后还是要放回去的,可以这样都干掉了。,我一直相信正则比较强大,无奈自己写不出这样的正则来
      

  6.   

    为啥要都加上u标签呢?搞不懂你的需求
    楼主是不是想把这些地方加上u标签后,方便以后取值就都用u标签来匹配纯文本就不用管其它标签了.如果是这样的话,只要把原来u标签内容获得后,在把里面的非u标签的html标签都替换成u标签效果也是一样的,这样一样可以后面只要用u标签来取值String str="<u>sdf<i>ewr<b>3<4</b>43>24</i>234<>234</u>";
    Pattern p=Pattern.compile("<u>.*?</u>");
    Matcher m=p.matcher(str);
    if(m.find()){
      str=m.group();//得到标签的内容
    //利用while循环如果内容中还有标签,把标签去掉只保留内容,直到剩下纯文本
      while(str.matches(".*<([^u]+)>(.*?)</\\1>.*")){
        str=str.replaceAll("<([^u]+)>(.*?)</\\1>","<u>$2</u>");
      }
      System.out.println(str);
    }
      

  7.   

    为啥要都加上u标签呢?搞不懂你的需求
    楼主是不是想把这些地方加上u标签后,方便以后取值就都用u标签来匹配纯文本就不用管其它标签了.如果是这样的话,只要把原来u标签内容获得后,在把里面的非u标签的html标签都替换成u标签效果也是一样的,这样一样可以后面只要用u标签来取值String str="<u>sdf<i>ewr<b>3<4</b>43>24</i>234<>234</u>";
    Pattern p=Pattern.compile("<u>.*?</u>");
    Matcher m=p.matcher(str);
    if(m.find()){
      str=m.group();//得到标签的内容
    //利用while循环如果内容中还有标签,把标签去掉只保留内容,直到剩下纯文本
      while(str.matches(".*<([^u]+)>(.*?)</\\1>.*")){
        str=str.replaceAll("<([^u]+)>(.*?)</\\1>","<u>$2</u>");
      }
      System.out.println(str);
    }
    不是的,因为这个html在网页上是可以展示的,而我是要将htm转成word,有问题是u标签里如果还有其它标签的话,这个u标签是无效的,到word中是没有效果的,所以之前我要把us标签中的内容一个一个加上才可以。
      

  8.   

    为啥要都加上u标签呢?搞不懂你的需求
    楼主是不是想把这些地方加上u标签后,方便以后取值就都用u标签来匹配纯文本就不用管其它标签了.如果是这样的话,只要把原来u标签内容获得后,在把里面的非u标签的html标签都替换成u标签效果也是一样的,这样一样可以后面只要用u标签来取值String str="<u>sdf<i>ewr<b>3<4</b>43>24</i>234<>234</u>";
    Pattern p=Pattern.compile("<u>.*?</u>");
    Matcher m=p.matcher(str);
    if(m.find()){
      str=m.group();//得到标签的内容
    //利用while循环如果内容中还有标签,把标签去掉只保留内容,直到剩下纯文本
      while(str.matches(".*<([^u]+)>(.*?)</\\1>.*")){
        str=str.replaceAll("<([^u]+)>(.*?)</\\1>","<u>$2</u>");
      }
      System.out.println(str);
    }
    不是的,因为这个html在网页上是可以展示的,而我是要将htm转成word,有问题是u标签里如果还有其它标签的话,这个u标签是无效的,到word中是没有效果的,所以之前我要把us标签中的内容一个一个加上才可以。
    楼主就等于要把u标签里面的纯文本的地方都要加上u标签了这个就比较复杂了不关是正则的问题还要一些逻辑处理
      

  9.   

    为啥要都加上u标签呢?搞不懂你的需求
    楼主是不是想把这些地方加上u标签后,方便以后取值就都用u标签来匹配纯文本就不用管其它标签了.如果是这样的话,只要把原来u标签内容获得后,在把里面的非u标签的html标签都替换成u标签效果也是一样的,这样一样可以后面只要用u标签来取值String str="<u>sdf<i>ewr<b>3<4</b>43>24</i>234<>234</u>";
    Pattern p=Pattern.compile("<u>.*?</u>");
    Matcher m=p.matcher(str);
    if(m.find()){
      str=m.group();//得到标签的内容
    //利用while循环如果内容中还有标签,把标签去掉只保留内容,直到剩下纯文本
      while(str.matches(".*<([^u]+)>(.*?)</\\1>.*")){
        str=str.replaceAll("<([^u]+)>(.*?)</\\1>","<u>$2</u>");
      }
      System.out.println(str);
    }
    不是的,因为这个html在网页上是可以展示的,而我是要将htm转成word,有问题是u标签里如果还有其它标签的话,这个u标签是无效的,到word中是没有效果的,所以之前我要把us标签中的内容一个一个加上才可以。
    楼主就等于要把u标签里面的纯文本的地方都要加上u标签了这个就比较复杂了不关是正则的问题还要一些逻辑处理嗯 我目前是用jsoup+正则搞定的,写正则写不出来没办法就想知道正则行不行,是不是偶能力有限
      

  10.   

    楼主就等于要把u标签里面的纯文本的地方都要加上u标签了这个就比较复杂了不关是正则的问题还要一些逻辑处理嗯 我目前是用jsoup+正则搞定的,写正则写不出来没办法就想知道正则行不行,是不是偶能力有限
    正则也是可以的就是逻辑上复杂了一点要进行下递归添加刚有空就写了下public static void main(String[] args) throws Exception {
    String str="<u>sdf<i>ewr<b>3<4</b>43>24</i>234<>234</u>";
    System.out.println(str);
    Pattern p=Pattern.compile("<u>(.*?)</u>");
    Matcher m=p.matcher(str);
    if(m.find()){
      StringBuilder sb=new StringBuilder();
      str=m.group(1);//获得u标签里的内容
      replace(str,sb);//内容中纯文本的地方都包上u标签
      System.out.println(sb);
    }
    }
    private static void replace(String str,StringBuilder sb){
    Matcher m=Pattern.compile("<([^u]+)>(.*?)</\\1>").matcher(str);
    int end=0;//这个用于记录上一次匹配的结尾
    while(m.find()){
    int start=m.start();
    //如果说匹配的起始小于上一次的结尾说明前面已经是纯文本了就要用u标签包起来
    if(start>end){
    sb.append("<u>").append(str.substring(end,start)).append("</u>");
    }
    //把原来的标签内容原样添加上去
    sb.append("<").append(m.group(1)).append(">");
    //如果标签之中的内容仍然有标签那么递归调用
    if(m.group(2).matches(".*<([^u]+)>(.*?)</\\1>.*")){
    replace(m.group(2),sb);
    }else{//没有标签了就是纯文本直接用u标签包上
    sb.append("<u>").append(m.group(2)).append("</u>");
    }
    //在把原来的标签内容结尾原样加上上去
    sb.append("</").append(m.group(1)).append(">");
    //改变上一次的匹配结尾用于最后的内容添加
    end=m.end();
    }
    //当最后匹配的内容未到末尾时说明后面还有纯文本再把后面的内容用u标签抱起来
    if(end<str.length()-1){
    sb.append("<u>").append(str.substring(end)).append("</u>");
    }
    }