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

39

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

澄清

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


21
这当然是一个真正的问题。它既不含糊,也不是不完整或者过于宽泛的。 - nes1983
3
你听说过FIRE/J吗?这是一篇出色的论文作品,阅读文章。我的基准测试显示它比当前JDK实现至少快10倍 - Nikita Koksharov
6
这个问题其实不应该被关闭... - Matt Wonlaw
2
无法添加答案,因为问题已关闭,但我找到了这个:https://github.com/logentries/re2-java - 似乎使用JNI调用RE2的C++版本,但不确定它是否已经完成/可用。 - Peter Boughton
2
要求我们推荐或寻找书籍、工具、软件库、教程或其他外部资源的问题,因为它们往往会吸引有主观意见的答案和垃圾邮件,所以在 Stack Overflow 上是不适合的。相反,请描述问题以及已经采取的解决方法。我在重新打开时忘记了这一点,但它绝对是不适合讨论的话题。 - Brigand
显示剩余4条评论
3个回答

16

5

这里有一个用于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

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接