是否存在类似RE2的Java正则表达式库?

时间:2011-08-20 21:39:30

标签: java regex re2

有没有人遇到Java版的Google正则表达式库RE2或具有类似功能和良好性能的java库?性能要求是关于正则表达式的长度和输入文本长度的线性时间。

澄清

大多数正则表达式实现使用回溯算法来匹配输入文本,因此在一些简单的正则表达式(如(.*).(.*).(.*).(.*))上呈指数形式。 RE2是谷歌的一个库,它通过使用一种算法来解决这个问题,该算法使用自动机理论的概念与输入大小线性变化。提问者想知道是否存在基于该算法的Java库。

3 个答案:

答案 0 :(得分:7)

谷歌今天发布了Go的RE2实现的纯Java端口。 你可以在这里找到它:

https://github.com/google/re2j

答案 1 :(得分:4)

这里有一个Java的有限状态自动包:www.brics.dk/automaton;另见this article。这是一个简单的例子:

RegExp r = new RegExp("ab(c|d)*");
Automaton a = r.toAutomaton();
String s = "abcccdc";
System.out.println("Match: " + a.run(s)); // prints: true

答案 2 :(得分:3)

谷歌搜索产生了这一点。

https://github.com/logentries/re2-java

它说它只支持linux 64位。

编辑: 我相信现在有一个更好的答案,正如Alan Donovan所回答的那样,因为谷歌自己已经发布了RE2的端口 https://github.com/google/re2j