- preg_replace: documentation ( source)
<?php
$re = '/[\t\n]+(?=[^][]*(?:(\[(?:[^][]++|(?1))*])[^][]*)*])/';
$str = "settings:a [\n a:[\n a:a\n b:b\n ]\n b:[\n a:a\n b:b\n ]\n]\n\nsettings:b [\n a:[\n \n\na:a\n b:b\n ]\n]";
echo preg_replace($re, ' ', $str);