Найдите шаблон:
\s+(?=[^{}]*})
и замените его одним пробелом.
\s+
соответствует одному или нескольким символам пробела (пробел, табуляция, разрыв строки)только при взгляде в будущее }
можно увидеть, не встречая {
между ними.
Остерегайтесь, что это может пойти не так в таких случаях:
#rules #footer ul { margin: 0 auto;
text-align: colorenter; /* } */
width: 700px;}
Небольшая демонстрация PHP:
<?php
$css = '#rules #footer ul { margin: 0 auto;
text-align: colorenter;
width: 700px;}
#rules #footer ul { margin: 0 auto;
text-align: colorenter;
width: 700px;}';
echo preg_replace('/\s+(?=[^{}]*})/', ' ', $css);
?>
напечатает:
#rules #footer ul { margin: 0 auto; text-align: colorenter; width: 700px;}
#rules #footer ul { margin: 0 auto; text-align: colorenter; width: 700px;}
, как вы можете видеть на Ideone .