Отказ от ответственности: я не эксперт по Java + регулярные выражения. Но, если я правильно понимаю ...
Если средство сопоставления регулярных выражений в Java похоже на большинство других, оно использует NFA, но не так, как вы могли бы ожидать. Вместо реализации только для пересылки, о которой вы, возможно, слышали, она использует решение обратного отслеживания, которое упрощает сопоставление подвыражений и, вероятно, требуется для использования обратных ссылок. Тем не менее, он выполняет чередование плохо.
Вы хотите увидеть: http://swtch.com/~rsc/regexp/regexp1.html (относительно граничных случаев, которые плохо работают на этой измененной архитектуре).
Я также написал вопрос, который, как мне кажется, сводится к тому же:
Реализация регулярного выражения, которая может обрабатывать машинные регулярные выражения: * без возврата *, O (n)?
Но, по сути, похоже, по какой-то очень странной причине, что все распространенные реализации регулярных выражений основных поставщиков имеют ужасную производительность при использовании на определенных регулярных выражениях, даже если это не является необходимым.