Может показаться, что парсер, написанный от руки - самый быстрый, но это не так. Вообще, декларативные языки ("кнопка такого-то размера") всегда лучше инструктивных ("нарисуй прямоугольник, если кликнут - вызови функцию"), поскольку декларацию можно оптимизировать или реализовать частично.
Но регэксы ужасны - стоит попытаться написать что-нибудь достаточно сложное, как выясняется, что:
- повторяющийся набор групп матчится только один раз
- наоборот, два одинаковых набора подряд матчатся как разные группы (следовало бы ожидать...)
- группам можно задать имена, но они должны быть уникальными (нафига тогда имена?)
- указать "если есть блок А, должен быть блок Б" крайне сложно, а уж "должен быть блок Б здесь либо чуть позже" вообще нельзя
И так далее.
Многие проблемы регэксов происходят из того, что они придуманы были как простой язык задания несложных правил поиска - одно выражение одной строкой. Вряд ли кто-то ждал, что с их помощью будут разбирать HTML.
Тогда почему бы не сделать аналог регэксов, только с полноценным описательным языком? Многострочный шаблон, который можно загрузить из файла, с поддержкой ссылок на другие шаблоны (тоже в других файлах), с явным описанием групп результатов и правил их заполнения.
Может, что-нибудь такое уже есть?