Задача такая: найти все классы (class) и индетификаторы (id) в css-Ффайле и проверить каждый, есть ли он в указанном html файле.
Если в html файле его нет, то корретно удалить из css-файла.
Написал следующий код:
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. Т.е. вот в этой:
$bvcbvc = "/[^\}]*?\\" . $id_class . $rezult_css_go[$i_serach] . "[^}]+\}/is";
$css = preg_replace($bvcbvc,'', $css);
Почему-то удаляется часть элементов, которые были найдены в html-файле.
К сожалению, не смог отследить закономерность.
Не могу понять, в чем моя ошибка?