2013-12-13 3 views
0

я должен прочитать файл CSS и удалить его комментарии, поэтому я решил использовать функцию preg_replace из PHP:Удалить комментарии из файла CSS

$original = ' 
/* 
foo 
*/ 
.test, input[type="text"]{ color: blue; } 

/* bar */ 
a:hover{ 
text-decoration: underline; 
color: red; 
background: #FFF; 
}'; 

echo preg_replace('/\/\*.*\*\//s', '', $original); 

проблема в том, что его потери линии .test, input[type="text"]{ color: blue; }

ответ

1

Изменить .*.*?.

echo preg_replace('#/\*.*?\*/#s', '', $original); 

Это удалит только /* до ближайшего */, а не дальний.

+0

как шарм. Спасибо за быстрый и точный ответ. Могу ли я спросить, почему опрос соответствует ближайшему? Я имею в виду, его совпадение «0 или 1 ocurrences» не так ли? – Carlos

+1

@ Карлос не в этом случае. См. Http://www.php.net/manual/en/regexp.reference.repetition.php –

0

Я хотел бы подойти к нему следующим образом:

\/\*((?!\*\/).*?)\*\/ 


\/\*   # Start-of-comment 
((?!\*\/).*?) # Any character 0 or more times, lazy, 
       # without matching an end-of-comment 
\*\/   # End-of-comment 

Demo

Смежные вопросы