Основанные на DFA модули регулярных выражений для Java с Capture

Существуют ли (бесплатные) механизмы регулярных выражений для Java, которые могут компилировать регулярное выражение в DFA и выполнять захват группы при сопоставлении DFA?

Я обнаружил dk.brics.automaton и jrexx, которые компилируются в DFA, но ни один из них не может сделать групповой захват. В то время как другие движки, которые я нашел, похоже, компилируются в NFA.

5 ответов

Попробуйте этот (вероятно, не DFA, но быстрее, чем java.util) http://jregex.sourceforge.net/gstarted-advanced.html, или этот: http://userguide.icu-project.org/

в соответствии с этим тестом: http://tusker.org/regex/regex_benchmark.html оба являются быстрыми (все мы знаем, что тесты тестируют только то, что хотел протестировать создатель теста).

Когда мне нужно было действительно быстрое регулярное выражение DFA, я породил процесс, использующий grep;-) (для файла журнала объемом 6 ГБ это сократило мое время с 10 минут до нескольких секунд).

Я недавно написал одно: дерево-регулярное выражение.

Для C есть библиотеки TRE и Google RE2. TRE использует DFA, RE2 использует NFA (насколько я понимаю), оба могут соответствовать подгруппе. Но я не видел такой библиотеки для Java.

dk.brics.automaton - это DFA, по-видимому, для захвата групп. Я ожидаю, что эта функция является новой в течение двух лет после этого вопроса. Проверьте класс AutomatonMatcher.

См. http://www.brics.dk/automaton/doc/dk/brics/automaton/AutomatonMatcher.html).

Вы можете попробовать библиотеку регулярных выражений Pat @ http://www.javaregex.com/.

Другие вопросы по тегам