一个字符串大约为15000的长度,匹配的数比较多,出错
S=S.replaceAll("<script((.|\n)+?)</script>","");请问应该怎么样解决 at java.util.regex.Pattern$GroupHead.match(Pattern.java:3968)
at java.util.regex.Pattern$LazyLoop.match(Pattern.java:4157)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4027)
at java.util.regex.Pattern$Dot.match(Pattern.java:3524)
at java.util.regex.Pattern$Branch.match(Pattern.java:3928)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:3968)
at java.util.regex.Pattern$LazyLoop.match(Pattern.java:4157)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4027)
at java.util.regex.Pattern$Dot.match(Pattern.java:3524)
at java.util.regex.Pattern$Branch.match(Pattern.java:3928)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:3968)
at java.util.regex.Pattern$LazyLoop.match(Pattern.java:4157)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4027)
at java.util.regex.Pattern$Dot.match(Pattern.java:3524)
at java.util.regex.Pattern$Branch.match(Pattern.java:3928)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:3968)
at java.util.regex.Pattern$LazyLoop.match(Pattern.java:4157)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4027)
at java.util.regex.Pattern$Dot.match(Pattern.java:3524)
at java.util.regex.Pattern$Branch.match(Pattern.java:3928)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:3968)
at java.util.regex.Pattern$LazyLoop.match(Pattern.java:4157)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4027)
at java.util.regex.Pattern$Dot.match(Pattern.java:3524)
at java.util.regex.Pattern$Branch.match(Pattern.java:3928)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:3968)
at java.util.regex.Pattern$LazyLoop.match(Pattern.java:4157)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4027)
at java.util.regex.Pattern$Dot.match(Pattern.java:3524)
at java.util.regex.Pattern$Branch.match(Pattern.java:3928)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:3968)
at java.util.regex.Pattern$LazyLoop.match(Pattern.java:4157)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4027)
at java.util.regex.Pattern$Dot.match(Pattern.java:3524)
......
at java.util.regex.Pattern$Dot.match(Pattern.java:3524)
at java.util.regex.Pattern$Branch.match(Pattern.java:3928)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:3968)
at java.util.regex.Pattern$LazyLoop.match(Pattern.java:4157)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4027)
at java.util.regex.Pattern$Dot.match(Pattern.java:3524)
at java.util.regex.Pattern$Branch.match(Pattern.java:3928)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:3968)
at java.util.regex.Pattern$LazyLoop.match(Pattern.java:4157)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4027)
at java.util.regex.Pattern$Dot.match(Pattern.java:3524)
at java.util.regex.Pattern$Branch.match(Pattern.java:3928)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:3968)
at java.util.regex.Pattern$LazyLoop.match(Pattern.java:4157)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4027)
at java.util.regex.Pattern$Dot.match(Pattern.java:3524)
at java.util.regex.Pattern$Branch.match(Pattern.java:3928)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:3968)
at java.util.regex.Pattern$LazyLoop.match(Pattern.java:4157)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4027)
at java.util.regex.Pattern$Dot.match(Pattern.java:3524)
at java.util.regex.Pattern$Branch.match(Pattern.java:3928)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:3968)
at java.util.regex.Pattern$LazyLoop.match(Pattern.java:4157)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4027)
at java.util.regex.Pattern$Dot.match(Pattern.java:3524)
at java.util.regex.Pattern$Branch.match(Pattern.java:3928)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:3968)
at java.util.regex.Pattern$LazyLoop.match(Pattern.java:4157)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4027)
at java.util.regex.Pattern$Dot.match(Pattern.java:3524)
at java.util.regex.Pattern$Branch.match(Pattern.java:3928)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:3968)
at java.util.regex.Pattern$LazyLoop.match(Pattern.java:4157)
......

解决方案 »

  1.   

    和匹配的个数多少没有什么关系,估计是你的<script>...</script>里的内容过长,导致溢出了。
    public static void main(String[] args) {
    StringBuffer buffer=new StringBuffer();
    for(int i=0;i<10000;i++)
    {
    buffer.append("aaaa<script>alert('123123');</script>1111"+i+"\n");
    }
    String str=buffer.toString();
    str=str.replaceAll("<script>((.|\n)+?)</script>","---");
    System.out.println(str);
    }
      

  2.   

    <script>...</script>最长能多长
      

  3.   

    我写的一个替换,希望你有用String labelRegex = "<sctipt|</script>";
        Pattern pa = Pattern.compile(labelRegex, Pattern.CASE_INSENSITIVE);
        Matcher ma = pa.matcher(_String);
        int labelBeginCount = 0;
        int labelEndCount = 0;
        int endLabel = 0 ;
        StringBuffer s = new StringBuffer(100);
        while(ma.find()) {
          if(ma.group().equalsIgnoreCase("<script")){
            labelBeginCount++;
            s.append(_htmlString.substring(endLabel,ma.start()));
          }
          else {
            labelEndCount++;
            if(labelBeginCount == labelEndCount)endLabel = ma.end();
          }
        }
        s.append(_htmlString.substring(endLabel));
        return s.toString();