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

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

Уточнение

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


person depthofreality    schedule 20.08.2011    source источник
comment
Это, конечно, реальный вопрос. Оно не является ни расплывчатым, ни неполным, ни слишком широким.   -  person nes1983    schedule 30.09.2011
comment
@ nes1983, я тоже не понимаю.   -  person ergosys    schedule 30.12.2011
comment
Вот информация о сопоставлении регулярных выражений с линейным временем: swtch.com/~rsc/regexp/regexp3 .html   -  person Miles    schedule 31.12.2011
comment
Этот вопрос действительно не должен был быть закрыт ...   -  person Matt Crinklaw-Vogt    schedule 08.09.2012
comment
Не могу добавить в качестве ответа, так как вопрос закрыт, но я нашел это: github.com/logentries/ re2-java - кажется, использует JNI для вызова версии RE2 на С++, хотя не уверен, что она уже завершена/пригодна для использования.   -  person Peter Boughton    schedule 28.01.2013
comment
Вопросы, в которых нас просят порекомендовать или найти книгу, инструмент, программную библиотеку, учебное пособие или другой сторонний ресурс, не относятся к теме Stack Overflow, поскольку они, как правило, привлекают самоуверенные ответы и спам. Вместо этого опишите проблему и то, что уже было сделано для ее решения. Я забыл об этом, когда нажимал повторно открыть, но это определенно не по теме.   -  person Brigand    schedule 20.09.2014
comment
У Google есть внутренний порт re2 на Java, исходный код которого может быть открыт в будущем.   -  person Miles    schedule 12.02.2015
comment
Как отмечено в ответе ниже, Google выпустил Java-порт RE2. Вы должны подумать о том, чтобы принять этот ответ.   -  person Gonen I    schedule 30.06.2015


Ответы (3)


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

https://github.com/google/re2j

person Alan Donovan    schedule 18.02.2015

Пакет конечного автомата для 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
person denim2x    schedule 28.09.2014

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

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

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

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

person Gonen I    schedule 23.09.2014