Замена по регулярному выражению с поиском по частям строки?
Вообще очень подозрительный вопрос. Вы точно уверены что оно вам надо? Мне кажется что нет)

Но если даже уверены — сами поглядите. Вам предлагают регулярку /(FROM|UPDATE|ALTER)\s+{([\w\d_]+)\}/iU а вы приводите ломающий ее пример UPDATE {table} SET `text`="пример запроса: SELECT * FROM {table}"… При том, что запросы, включающие в себя данные, уже года 4 как нормальные люди не используют. Есть же плейсхолдеры (в похапе их поддерживает как минимум PDO). Т.е. будете писать UPDATE {table} SET `text`=:text WHERE id IN( SELECT id FROM {other_table}), проводить все ваши замечательные замены и потом уже средствами PDO биндить данные к запросу.

Если такой подход чем-то не устраивает, нужно еще раз хорошенько задуматься. Если не помогло — то тогда делайте какие-то более уникальные метки для выделения имен таблиц в стиле SELECT * FROM {#$table$#}. Ну и крайний случай — пишите полноценный парсер SQL по всяким BNF правилам. Хотя тогда скорее всего просто зря потеряете кучу времени.
если нужно просто заменять "{table}" на «prefix_table» то зачем тут регекспы?
$query = str_replace('{table}','`prefix_table`',$query);
