Основанные на DFA регулярные выражения для Java с захватом
Существуют ли какие-либо (бесплатные) механизмы регулярного выражения для Java, которые могут компилировать регулярное выражение в DFA и выполнять групповой захват при сопоставлении DFA?
Я нашел dk.brics.automaton и jrexx, которые оба компилируются в DFA, но ни один из них не может сделать групповой захват. В то время как другие найденные мной двигатели, похоже, компилируются в NFA.
Ответы
Ответ 1
попробуйте этот (возможно, не 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
Недавно я написал один: tree-regex.
Ответ 3
Для C есть TRE и Google RE2. TRE использует DFA, RE2 использует NFA (насколько я понимаю), оба могут совпадать между подгруппами. Но я не видел такую библиотеку для Java.
Ответ 4
вы можете попробовать библиотеку регулярных выражений Pat @http://www.javaregex.com/.
Ответ 5
dk.brics.automaton - это DFA, похоже, делает группы захвата. Я ожидаю, что эта функция будет новой в течение двух лет с момента этого вопроса. Проверьте класс AutomatonMatcher.
См. http://www.brics.dk/automaton/doc/dk/brics/automaton/AutomatonMatcher.html#group(int)