Основанные на DFA модули регулярных выражений для Java с Capture - PullRequest
10 голосов
/ 26 декабря 2009

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

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

Ответы [ 5 ]

3 голосов
/ 12 мая 2011

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

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

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

2 голосов
/ 28 сентября 2011

Я недавно написал одно: tree-regex .

0 голосов
/ 23 июля 2011

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

См. http://www.brics.dk/automaton/doc/dk/brics/automaton/AutomatonMatcher.html#group(int)

0 голосов
/ 29 июля 2010

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

0 голосов
/ 07 февраля 2010

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

...