use warnings; $braces = qr/(? { (?: [^{}] | (?&braces) )*+ } )/x; s/class \s+ (? \w+) \s* (\: (\s* \w*)? \s* (? \w+))?+ \s* $braces //x;