public static String[] match(String original,int start, String begin, String end) {
Pattern pat = Pattern.compile(begin+"((?:.|\n|\r)*?)"+end); //? 跟在限定字符后,非贪婪模式
Matcher mat = pat.matcher(original);
mat.region(start, original.length());
if(mat.find()){
logger.info(mat.group(0) +" start:"+mat.start()+" end:"+mat.end()+" count:"+mat.groupCount());
return new String[]{mat.group(1),String.valueOf(mat.start()),String.valueOf(mat.end())};
}
return null;
}
public static void main(String[] args){
match(getTestStr(), 0, "<tr class=\"GridItem\" nowrap=\"nowrap\">", "</tr>");
}其中getTestStr()方法读取一个html文件返回其字符;当begin + group(0) + end有853个字符时,就抛出内存溢出的异常
想问下这种情况怎么解决,或者什么开源项目能够解决
主要工作是从html解析提取指定标签 之间的内容,感觉如果使用indexof方式会比较繁琐Exception in thread "main" java.lang.StackOverflowError
at java.lang.Character.codePointAt(Character.java:2335)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3344)
at java.util.regex.Pattern$Branch.match(Pattern.java:4114)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4168)
at java.util.regex.Pattern$LazyLoop.match(Pattern.java:4357)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4227)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4078)
我提取2M大的网页文件 内容都没事 你加好过滤条件就行了
htmlparse 确实性能有些~~ 内存溢出到源代码了~~
提取<tr class=“xxx”>后,标签里有一个input标签,然后jsoup就自动帮我加了对<form></form>将其包起来不知道谁能解释下原因