StackOverflowError出现时使用的是java.util.regex.Matcher

时间:2010-03-03 09:31:33

标签: java regex

我尝试通过正则表达式捕获文本。我按如下方式列出代码。

Pattern p=Pattern.compile("<@a>(?:.|\\s)+?</@a>"); 
Matcher m = p.matcher(fileContents.toString());
while(m.find()) {
    //Error will be thrown at this point
    System.out.println(m.group());
}

如果我要捕获的文本长度太长,系统会抛出一个StackOverflowError。  否则,代码运行良好。  请帮我解决这个问题。

2 个答案:

答案 0 :(得分:3)

点和\s都匹配空格字符。这可能导致不必要的回溯。你想要匹配的做什么?可能是任何角色,包括换行?

然后只需使用启用了dot-matches-newlines选项的延迟点:

Pattern p=Pattern.compile("<@a>.+?</@a>", Pattern.DOTALL);

您知道如果<@a>标签可以嵌套在您的输入中,您会遇到麻烦吗?

答案 1 :(得分:-1)

I always try to search text with case insensitive..
Pattern p=Pattern.compile("<@a>.+?</@a>", Pattern.DOTALL | Pattern.CASE_INSENSITIVE);