如何让正则表达式忽略括号之间的所有内容?

Pr0*_*0no 11 php regex

请考虑以下字符串:

I have been driving to {Palm.!.Beach:100} and it . was . great!!
Run Code Online (Sandbox Code Playgroud)

我使用以下正则表达式删除所有标点符号:

$string preg_replace('/[^a-zA-Z ]+/', '', $string);
Run Code Online (Sandbox Code Playgroud)

这输出:

I have been driving to PalmBeach and it  was  great!!
Run Code Online (Sandbox Code Playgroud)

但我需要正则表达式始终忽略{和}之间的任何内容.所以期望的输出将是:

I have been driving to {Palm.!.Beach:100} and it  was  great
Run Code Online (Sandbox Code Playgroud)

我怎样才能让正则表达式忽略{和}之间的内容?

ste*_*ema 16

试试这个

[^a-zA-Z {}]+(?![^{]*})
Run Code Online (Sandbox Code Playgroud)

在Regexr上看到它

mean表示匹配否定字符类中未包含的任何内容,但仅当前面没有前面没有右括号时,这是由负向前瞻完成的(?![^{]*}).

$string preg_replace('/[^a-zA-Z {}]+(?![^{]*})/', '', $string);
Run Code Online (Sandbox Code Playgroud)