Основанные на 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/.