Intereting Posts
Изменение статуса CodeIgniter Что привело бы к добавлению% 5B0% 5D в URL-адрес Как языки сценариев используют сокеты? Класс Wrapper Thread для функции с переменными аргументами в PHP Google Appengine 1.9.3 / 4 и WordPress 3.9. Пользователь-администратор не работает полностью на локальном хосте В PHP / MySQL следует открыть несколько соединений с базой данных или поделиться 1? Как я могу выбрать конкретные столбцы с createQueryBuilder в ORM Symfony2? php: удаление разделяемой памяти на окнах Как отлаживать файл PHP, который вызывается AJAX? выполнение нескольких preg_replace с различным поиском и заменой каждый раз Подавать большой файл с PHP и nginx X-Accel-Redirect Вызвать функцию php из командной строки int переменная с начальным нулем? Преобразование текста (с разделителем табуляции) в ассоциативный массив PHP вместо этого кода для CSV? PHP Неустранимая ошибка: «Swift_TransportException» с сообщением «Не удалось выполнить проверку подлинности на SMTP-сервере

Минимизировать CSS с помощью preg_replace

Я пытаюсь минимизировать несколько файлов CSS, используя preg_replace. На самом деле, я только пытаюсь удалить любые строки / вкладки и комментарии из файла. для меня работает следующее:

 $ regex = array ('{\ t | \ r | \ n}', '{(/\*(.*?)\*/)}');
 echo preg_replace ($ regex, '', file_get_contents ($ file));

Но я хотел бы сделать это в одном многострочном регулярном выражении, например:

 $ regex = <<< EOF
 {(
     \ т
 |
     \р
 |
     \ п
 |
     /\*(.*?)\*/
 )}Икс
 EOF;
 echo preg_replace ($ regex, '', file_get_contents ($ file));

Однако это ничего не делает. Есть какой-либо способ сделать это?


Редактирование: Хорошо, поэтому я посмотрю на существующие мини-инструменты, но это все равно оставляет вопрос о том, как я буду делать многострочное регулярное выражение, например, потому что многострочные регулярные выражения x-modifier должны работать нормально даже в php, они?

Доступны утилиты, которые могут соответствовать вашим потребностям и сэкономить вам потенциально багги-регулярное выражение.

Компрессор YUI поддерживает минимизацию CSS и javascript файлов.

Возможно, вы захотите рассмотреть этот или другие существующие варианты, прежде чем писать свои собственные.

Я не уверен, как вы это сделаете, но вот сценарий, который мой друг написал, что довольно быстро при минимизации CSS:

function minimize_css($input) { // Remove comments $output = preg_replace('#/\*.*?\*/#s', '', $input); // Remove whitespace $output = preg_replace('/\s*([{}|:;,])\s+/', '$1', $output); // Remove trailing whitespace at the start $output = preg_replace('/\s\s+(.*)/', '$1', $output); // Remove unnecesairy ;'s $output = str_replace(';}', '}', $output); return $output; } 

Это то, что я лично использую для CSS:

 $file_contents = file_get_contents($file);<br /> preg_replace('@({)\s+|(\;)\s+|/\*.+?\*\/|\R@is', '$1$2 ', $file_contents); 

Это кажется прекрасным примером того, как не изобретать колесо. Почти каждый сайт в Интернете использует CSS, и все крупные сжимают его каким-то образом. Их методы уже проверены и оптимизированы. Зачем откатываться, если вам не нужно?

Майк и Грумбо уже дали конкретные предложения, но я просто хотел указать на общий принцип.

Насколько я знаю, вы не можете этого сделать, потому что на самом деле вы меняете шаблон, когда вы разбиваете его на несколько строк.

Редактируйте: и да, +1 за то, что не изобретаете колесо.

Это то, что я использую в Samstyle PHP Framework :

 $regex = array( "`^([\t\s]+)`ism"=>'', "`([:;}{]{1})([\t\s]+)(\S)`ism"=>'$1$3', "`(\S)([\t\s]+)([:;}{]{1})`ism"=>'$1$3', "`\/\*(.+?)\*\/`ism"=>"", "`([\n|\A|;]+)\s//(.+?)[\n\r]`ism"=>"$1\n", "`(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+`ism"=>"\n" ); $buffer = preg_replace(array_keys($regex),$regex,$buffer); 

Надеюсь это поможет!

 function minifyCSS($css){ $css = trim($css); $css = str_replace("\r\n", "\n", $css); $search = array("/\/\*[^!][\d\D]*?\*\/|\t+/","/\s+/", "/\}\s+/"); $replace = array(null," ", "}\n"); $css = preg_replace($search, $replace, $css); $search = array("/;[\s+]/","/[\s+];/","/\s+\{\\s+/", "/\\:\s+\\#/", "/,\s+/i", "/\\:\s+\\\'/i","/\\:\s+([0-9]+|[AF]+)/i","/\{\\s+/","/;}/"); $replace = array(";",";","{", ":#", ",", ":\'", ":$1","{","}"); $css = preg_replace($search, $replace, $css); $css = str_replace("\n", null, $css); return $css; 

}


http://mhameen.blogspot.com/2010/04/crystal-script-manger-for-php.html#links