$re = '~^(?P<name>[A-Z_-]+)\s+
(?P<body>\{
(?:(?:[^{}]+)|(?2))+
\})~mx';
$str = 'CPE-MGT {
instance-type virtual-router;
interface ge-0/0/0.0;
routing-options {
static {
route 192.168.253.115/32 next-hop 192.168.100.1;
route 0.0.0.0/0 next-hop 192.168.100.1;
}
}
}
DATA {
instance-type virtual-router;
interface ge-0/0/1.0;
}
MGMT_BK {
instance-type virtual-router;
interface ge-0/0/2.0;
routing-options {
static {
route 192.168.253.115/32 next-hop 192.168.100.1;
route 0.0.0.0/0 next-hop 192.168.100.1;
}
}
}';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php