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