我尝试通过正则表达式捕获文本。我按如下方式列出代码。
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。 否则,代码运行良好。 请帮我解决这个问题。
答案 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);