У меня есть модуль в php, что берется за то, чтобы искать все файлы css папки, "minificarlos" и писать весь контент в новом css.
private function cssFile($css_file, $widget_id = '') {
$css = '';
$css .= file_get_contents($css_file);
$css = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $css);
$css = str_replace(': ', ':', $css);
$css = str_replace(array("\n", "\t", ' ', ' ', ' '), '', $css);
return $css;
}
Какого способа я могу добавлять префикс к каждому из классов и Ids?
Я не могу делать один str_replace
потому что он затронул бы цвета: rgba(0,0,0,0.5), #fff;
Ты мог бы искать все #
и .
что были продолжены из-за {
не имея ни одной }
в способе.
/[#.]\K(?=[a-z0-9][^{}]*+{)/i
[#.]
- Совпади с 1 характером, который был бы #
или .
\K
- Resetea совпадение (для того, чтобы #
или .
не включайтесь в замену)(?=[a-z0-9][^{}]*+{)
Lookahead (он должен совпадать, но не тратит символы) для: [a-z0-9]
- Имя класса или пойдите он был бы должен начинаться с буквой или числом[^{}]*+
- следуемый любым характером, который не был бы {
ни }
{
- и потом {
что открывает стиль./i
- Для того, чтобы он совпал с прописными буквами и строчными буквами.function prefijarClasesYIds($css_file, $prefijo = '') {
return preg_replace( '/[#.]\K(?=[a-z0-9][^{}]*+{)/i', $prefijo, $css_file);
}
$css_file = "
a:hover, a:visited, a.unId {
prop: #aaa;
}
body, #fff, a:link {
prop: #bbb;
}
.algun_id, #clase1, #clase2.otroId {
prop: #ddd;
}
";
$ejPrefijo = "PREFIJO";
$css_file = prefijarClasesYIds( $css_file, $ejPrefijo);
echo $css_file;
a:hover, a:visited, a.PREFIJOunId {
prop: #aaa;
}
body, #PREFIJOfff, a:link {
prop: #bbb;
}
.PREFIJOalgun_id, #PREFIJOclase1, #PREFIJOclase2.PREFIJOotroId {
prop: #ddd;
}
Заметь: Понимают, что уже ты удалил комментарии перед этой функцией. И, может быть, он мог бы не удаваться с каким-то редким примером, но в этом случае, agregá этот пример в вопросе и я это приспосабливаю.
В travГ©s Regex я resultГі невозможный ввиду того, что есть стоимость внутри css, который не могут дифференцировать с единственным главным файлом, пример #Id , #comentario , #fff . Хотя я не гордый меня cГіdigo основано на str_replace - Гєnico, которая я функционирует правильно.
я Это имею, если он следует кому-то Гєtil:
private function cssFile($css_file, $id = '') {
$css = '';
$css .= file_get_contents($css_file);
$css = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $css);
$css = str_replace(
array(": ", "\n", "\t", ", ", " ", "}#", " {", "}.", ",.", " > "),
array(':', "","", ",", "", "}#".$id."#", "{", "}#".$id.".", ",#".$id.".", ">")
, $css);