有没有人遇到过 Google 的正则表达式库 RE2 的 Java 版本或具有类似功能和良好性能的 Java 库?性能要求是关于正则表达式长度和输入文本长度的线性时间。
澄清
大多数正则表达式实现使用回溯算法来匹配输入文本,因此在一些简单的正则表达式(如(.*).(.*).(.*).(.*)
. RE2 是 google 的一个库,它通过使用自动机理论概念随输入大小线性变化的算法来解决这个问题。提问者想知道是否存在基于此算法的 Java 库。
谷歌今天发布了 Go 的 RE2 实现的纯 Java 端口。你可以在这里找到它:
这里有一个用于 Java 的有限状态自动机包:www.brics.dk/automaton;另见这篇文章。这是一个简单的例子:
RegExp r = new RegExp("ab(c|d)*");
Automaton a = r.toAutomaton();
String s = "abcccdc";
System.out.println("Match: " + a.run(s)); // prints: true
谷歌搜索产生了这一点。
https://github.com/logentries/re2-java
它说它只支持 linux 64 位。
编辑:我相信现在有一个更好的答案,正如 Alan Donovan 所回答的那样,因为谷歌自己已经发布了 RE2 的端口 https://github.com/google/re2j