Существует ли RE2-подобная библиотека регулярных выражений для Java? - PullRequest
34 голосов
/ 21 августа 2011

Кто-нибудь сталкивался с Java-версией библиотеки регулярных выражений Google RE2 или java-библиотекой с похожими возможностями и хорошей производительностью? Требование производительности - это линейное время относительно длины регулярного выражения и длины входного текста.

Разъяснение

Большинство реализаций регулярных выражений используют алгоритм обратного отслеживания для сопоставления входного текста и, следовательно, являются экспоненциальными для некоторых простых регулярных выражений, таких как (.*).(.*).(.*).(.*). RE2 - это библиотека от Google, которая решает эту проблему с помощью алгоритма, который изменяется линейно в зависимости от размера ввода, используя понятия теории автоматов. Спрашивающий хочет знать, существуют ли библиотеки для Java, основанные на этом алгоритме.

Ответы [ 3 ]

7 голосов
/ 18 февраля 2015

Google сегодня выпустила чистый порт Java для реализации RE2 в Go.Вы можете найти его здесь:

https://github.com/google/re2j

4 голосов
/ 28 сентября 2014

Здесь есть пакет автоматов для 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 голосов
/ 24 сентября 2014

Поиск Google дал это.

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

говорится, что он поддерживает только 64-разрядную версию Linux.

Edit: Я полагаю, что теперь доступен лучший ответ, как ответил Алан Донован, поскольку сами Google выпустили порт RE2 https://github.com/google/re2j

...