【发布时间】:2014-04-26 17:56:17
【问题描述】:
我有以下正则表达式和输入:
基本上,我想匹配最后一个“哟”并将所有内容保持为绿色(组(1))。
这适用于小文件/输入。
但是,如果我在 java 中针对一个非常大 (100k) 的文件运行它,该文件没有模式匹配(只有一堆文本 - war&peace sn-p),它可能需要 10 秒以上才能从尝试返回找到匹配。我假设正则表达式存在回溯问题(特别是 (.*) group(1) 匹配)。
我可以做些什么来防止每个用例的回溯并加速这个正则表达式以满足上述要求?
-- Java 代码--
// Works fine for this small snippet but when run against 100k large input
// as described above some serious perf issues start happening.
String text = "Hi\n\nyo keep this here\n\nKeep this here\n\nyo\nkey match line here cut me:\n\nAll of this here should be deleted";
System.out.println(text);
Pattern PATTERN = Pattern.compile("^(.*)((\\byo\\b.*?(cut me:).*))$",
Pattern.MULTILINE | Pattern.DOTALL);
Matcher m = PATTERN.matcher(text);
if (m.find()) {
text = m.group(1);
System.out.println(text);
}
【问题讨论】:
-
也许使用Possessive Quantifiers 会有所帮助。