protected function parseSelectorString($selector)
{
$matches = [];
preg_match_all($this->pattern, trim($selector) . ' ', $matches, PREG_SET_ORDER);
// skip tbody
$result = [];
foreach ($matches as $match) {
// default values
$tag = strtolower(trim($match[1]));
$operator = '=';
$key = null;
$value = null;
$noKey = false;
$alterNext = false;
// check for elements that alter the behavior of the next element
if ($tag == '>') {
$alterNext = true;
}
// check for id selector
if (!empty($match[2])) {
$key = 'id';
$value = $match[2];
}
// check for class selector
if (!empty($match[3])) {
$key = 'class';
$value = $match[3];
}
// and final attribute selector
if (!empty($match[4])) {
$key = strtolower($match[4]);
}
if (!empty($match[5])) {
$operator = $match[5];
}
if (!empty($match[6])) {
$value = $match[6];
}
// check for elements that do not have a specified attribute
if (isset($key[0]) && $key[0] == '!') {
$key = substr($key, 1);
$noKey = true;
}
$result[] = ['tag' => $tag, 'key' => $key, 'value' => $value, 'operator' => $operator, 'noKey' => $noKey, 'alterNext' => $alterNext];
if (trim($match[7]) == ',') {
$this->selectors[] = $result;
$result = [];
}
}
// save last results
if (count($result) > 0) {
$this->selectors[] = $result;
}
}