正規表現はまったく必要ありません:
$str = 'aaa aaa{bb b {c cc}{d dd}e ee}xxx';
$replace = substr(substr($str, 0, strrpos($str, '}') + 1), strpos($str, '{'));
echo $replace; // displays "{bb b {c cc}{d dd}e ee}"
このコードをベンチマークすると、おそらく正規表現よりもはるかに高速になるでしょう。単純なものに複雑なものを使用するべきではありません。
文字列ごとに複数の結果を一致させたいと思うかもしれません。その場合、モジュールに依存しないより高速なソリューションがおそらくまだあります。
$str = 'aaa aaa{bb b {c cc}{d dd}e ee}xxxaaa qaaa{bb b {cqwe cc}{d cdd}e qweee}xxx';
$array = str_split($str);
$opens = 0;
$result = '';
$results = array();
for($i = 0; $i < count($array); $i++) {
if($array[$i] === '{') {
$opens++;
} else if($array[$i] === '}' && $opens > 0) {
$opens--;
}
if($opens > 0) $result .= $array[$i];
if($opens === 0 && strlen($result) > 0) {
$results[] = $result . '}';
$result = '';
}
}
print_r($results);
/*
results:
Array
(
[0] => {bb b {c cc}{d dd}e ee}
[1] => {bb b {cqwe cc}{d cdd}e qweee}
)
*/