Добавлять префиксы к классам и ids CSS в 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;

4
задан 25.03.2017, 07:42
2 ответа

Ты мог бы искать все # и . что были продолжены из-за { не имея ни одной } в способе.


RegEx

/[#.]\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;
}

Demo в Ideone



Заметь: Понимают, что уже ты удалил комментарии перед этой функцией. И, может быть, он мог бы не удаваться с каким-то редким примером, но в этом случае, agregá этот пример в вопросе и я это приспосабливаю.

2
ответ дан 24.11.2019, 13:28
  • 1
    Привет, спасибо за твой ответ. Функционирует очень хорошо твой Regex! – Infobuscador 10.09.2016, 11:48

В 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);
2
ответ дан 24.11.2019, 13:28

Теги

Похожие вопросы