Существует ли RE2-подобная библиотека регулярных выражений для Java?
Кто-нибудь сталкивался с Java-версией библиотеки регулярных выражений Google RE2 или java-библиотекой с похожими возможностями и хорошей производительностью? Требование производительности - это линейное время относительно длины регулярного выражения и длины входного текста.
осветление
Большинство реализаций регулярных выражений используют алгоритм обратного отслеживания для сопоставления входного текста и, следовательно, являются экспоненциальными для некоторых простых регулярных выражений, таких как (.*).(.*).(.*).(.*)
, RE2 - это библиотека от Google, которая решает эту проблему с помощью алгоритма, который изменяется линейно в зависимости от размера ввода, используя понятия теории автоматов. Спрашивающий хочет знать, существуют ли библиотеки для Java, основанные на этом алгоритме.
3 ответа
Сегодня Google выпустил чистый порт Java для реализации RE2 в Go. Вы можете найти это здесь:
Здесь есть пакет автоматов для Java с конечным состоянием: http://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