https://github.com/sabberworm/PHP-CSS-Parser
В целом же задачу можно реализовать в 20-30 строк, как уже говорилось, путем написания своего примитивного парсера посимвольного (с регулярками). Но это ж писать надо... и не факт что мы покроем все кейсы.
но если вам скучно, то вот вам набросок идеи, кривой и не красивый...
<?php
$styles = "background : 'te;st'; font-size: 12px";
parse($styles); // ["background", "'te;st'", "font-size", "12px"]
function parse($rawStyles) {
$styles = rtrim($rawStyles, ';') . ';';
$isInString = false;
$offset = 0;
$chunks = [];
$lastChunkOffset = 0;
while(preg_match('/[:;\'\"]/', $styles, $matches, PREG_OFFSET_CAPTURE, $offset)) {
$offset = $matches[0][1] + 1;
$char = $matches[0][0];
if ($isInString && !in_array($char, ['\'', '"'])) {
continue;
}
if (in_array($char, ['\'', '"'])) {
$isInString = !$isInString;
continue;
}
$chunks[] = trim(mb_substr($styles, $lastChunkOffset, $offset - $lastChunkOffset-1));
$lastChunkOffset = $offset;
}
return $chunks;
}