Удалить class и id из css-файла

seowin

Новичок
Приветствую!

Задача такая: найти все классы (class) и индетификаторы (id) в css-Ффайле и проверить каждый, есть ли он в указанном html файле.
Если в html файле его нет, то корретно удалить из css-файла.

Написал следующий код:

PHP:
function serachClass ($id_class) {
    GLOBAL $css;

    //Находим все классы
    $sclid = "/\\" . $id_class . "[\w_-]+(\,|\{|\s+|\:)/i";
    preg_match_all($sclid,$css,$serach_class);

    $css_repl = array("}", "{", ":", ",");
    $rezult_css = array();
    $rezult_css_go = array();

    //Очищаем массив
    for($i = 0; $i < count($serach_class[0]); $i++) {
    $rezult_css[] = trim(str_replace($css_repl, "", $serach_class[0][$i]));
    }

    //Выделяем уникальные значения из массива
    $rezult_css = array_unique($rezult_css);

    //Делаем конечный массив
    foreach ($rezult_css as $key_val) {
        $rezult_css_go[] = trim(str_replace($id_class, "", $key_val));
    }

    //Проверка существования класса(ID) в html-файле
    $serch = file_get_contents("./rezult/default/result.tpl");

    for($i_serach = 0; $i_serach < count($rezult_css_go); $i_serach++) {
   
        if($id_class == ".") {

            if(preg_match("/class=\".*$rezult_css_go[$i_serach].*\"/", $serch)) {
           
            echo "Класс " . $rezult_css_go[$i_serach] . " найден в базе <br/>" ;
           
            } else {
                $bvcbvc = "/[^\}]*?\\" . $id_class . $rezult_css_go[$i_serach] . "[^}]+\}/is";
                $css = preg_replace($bvcbvc,'', $css);
            }
        } elseif($id_class == "#") {
            if(preg_match("/id=\".*$rezult_css_go[$i_serach].*\"/", $serch)) {
           
            echo "ID " . $rezult_css_go[$i_serach] . " найден в базе <br/>" ;
           
            } else {
                $bvcbvc = "/[^\}]*?\\" . $id_class . $rezult_css_go[$i_serach] . "[^}]+\}/is";
                $css = preg_replace($bvcbvc,'', $css);
            }
        }

    }
}

serachClass(".");
serachClass("#");
Классы и ID определяются верно.

Проблема в регулярке, которая удаляет в css-файле не найденные в html-коде классы и ID. Т.е. вот в этой:

PHP:
$bvcbvc = "/[^\}]*?\\" . $id_class . $rezult_css_go[$i_serach] . "[^}]+\}/is";
$css = preg_replace($bvcbvc,'', $css);
Почему-то удаляется часть элементов, которые были найдены в html-файле.
К сожалению, не смог отследить закономерность.

Не могу понять, в чем моя ошибка?
 

antson

Новичок
Партнер клуба
seowin, лучше ручками.
в ксс такого может быть наворочено, что простыми регулярками не обойтись.
минимум нужно разобрать на отдельные правила , с учетом медиа-селекторов и порядка объявления
причем склейка многих вещей в одно правило не допустима.

ксс_селектор{стили}
а дальше уже смотреть ксс_селектор одинарный ?
нет - разбить его на одинарные
получился например такой
body.mainpage aside.yellow > p a:first_child:before
а в теле страницы у тебя эти классы есть, но применительно к другим элементам. Засада ;(
Еще не отговорил тебя ручками почистить ?

Если нет, то начинаем проверять в теле страницы есть элементы подходящие под правило ?
значит оставляем или проверяем остальные селекторы этого стиля.
Если ни один не сработал, можно удалить.

прошлись по всем . аккуратно собираем файлик обратно.
 
Сверху