Ну а как бы вы написали запрос с одним JOIN-ом на file? Вам ведь требуется вытягивать два различных объекта file для одного объекта link.
Боюсь скапитанить, но всё ли в порядке с индексами?
Регулярки тоже описывают конечный автомат, в этом и причина невозможности разбора вложенных конструкций.
В статье про компиляторы шла речь о магазинных автоматах.