Как позволить регулярному выражению игнорировать все между скобками?

Рассмотрим следующую строку:

I have been driving to {Palm.!.Beach:100} and it . was . great!! 

Я использую следующее регулярное выражение для удаления всех знаков препинания:

 $string preg_replace('/[^a-zA-Z ]+/', '', $string); 

Эти результаты:

 I have been driving to PalmBeach and it was great!! 

Но мне нужно, чтобы регулярное выражение всегда игнорировало все, что находится между {и}. Таким образом, желаемый результат будет:

 I have been driving to {Palm.!.Beach:100} and it was great 

Как я могу позволить регулярному выражению игнорировать то, что находится между {и}?

Попробуй это

 [^a-zA-Z {}]+(?![^{]*}) 

См. Здесь, в Regexr

Средство соответствует всем, что не входит в отрицательный класс символов, но только если нет закрывающей скобки впереди без открытия раньше, это делается с помощью отрицательного lookahead (?![^{]*}) .

 $string preg_replace('/[^a-zA-Z {}]+(?![^{]*})/', '', $string); 
 $str = preg_replace('(\{[^}]+\}(*SKIP)(*FAIL)|[^a-zA-Z ]+)', '', $str); 

См. Также Разделите строку разделителем, но нет, если она экранирована .