В июле в re2j добавили поддержку именованных групп. Я решил протестить его на тех же данных, что в #zhxde. В этот раз с более точным замером времени. Вот результаты:
Для файла размером 1128824 байт:

jni + pcre              — 111ms
com.google.re2j.Pattern — 201ms
java.regex.Pattern      — 886ms

Для файла размером 408739 байт:

jni + pcre              — 13ms
com.google.re2j.Pattern — 40ms
java.regex.Pattern      — 6ms

Какие выводы можно сделать?
1. re2j заявляет что работает с линейной сложностью и это, похоже, примерно выполняется
2. re2j не является серебряной пулей. Т.е. есть случаи, когда java.regex.Pattern его сильно обгоняет
3. Я хуею от результатов java.regex.Pattern. Вот блядь вообще не знаю как объяснить эти результаты. Тем более что регулярка у меня не вот прям сложная, а проверяет, что семь слов встречаются в тексте, а между ними может идти всё что угодно (ну и регистр некоторых символов может варьироваться)
4. jni + pcre неожиданно хорош. С учётом того, что ему нужно сначала целиком скопировать содержимое UTF-16 строки, затем сконвертировать её в UTF-8, а потом прогнать регулярку — это очень неплохой результат.