Ответ 1
Сегодня Google выпустил порт чистой версии Java для реализации Go RE2. Вы можете найти его здесь:
Кто-нибудь попадал на Java-версию библиотеки регулярных выражений Google RE2 или java-библиотеку с аналогичными возможностями и хорошей производительностью? Требование производительности - это линейное время относительно длины регулярного выражения и длины входного текста.
В большинстве реализаций регулярных выражений используется алгоритм обратного отслеживания для соответствия входному тексту и, следовательно, экспоненциальный в некоторых простых регулярных выражениях, таких как (.*).(.*).(.*).(.*)
. RE2 - это библиотека из Google, которая решает эту проблему, используя алгоритм, который линейно изменяется с размером ввода, используя концепции теории автоматов. Вопросник хочет знать, существуют ли библиотеки для Java, основанные на этом алгоритме.
Сегодня Google выпустил порт чистой версии Java для реализации Go RE2. Вы можете найти его здесь:
Для 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
Поиск в Google дал это.
https://github.com/logentries/re2-java
он говорит, что поддерживает только 64-разрядную версию Linux.
Изменить: Я считаю, что теперь доступен лучший ответ, как ответил Алан Донован, поскольку сами Google выпустили порт RE2 https://github.com/google/re2j