Formate uma string excluindo o texto entre colchetes

$str = 'This [WILL] be fOrMatTed';

$matches
= array();
$searches
= array();
preg_match_all
('([(.+?)])', $str, $placeholders);
$lstr
= strtolower($str);
foreach ($placeholders[0] as $mk => $match) {
$pos
= $mk+1;
$matches
[] = $match;
$searches
[] = strtolower($match);
}
// Replace lower case with original case
$fstr
= str_replace($searches,$matches,$lstr);
// Remove brackets
$fstr
= str_replace(array('[',']'), '', $fstr);

echo $fstr
// outputs 'this WILL be formatted'