你根本不需要正则表达式:
$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}
)
*/