protected function createToken($value)
{
if (preg_match('/^(' . static::MATCH_INDEX . ')$/x', $value, $matches)) {
return new JSONPathToken(JSONPathToken::T_INDEX, $value);
}
if (preg_match('/^' . static::MATCH_INDEXES . '$/x', $value, $matches)) {
$value = explode(',', $value);
foreach ($value as $i => $v) {
$value[$i] = (int) trim($v);
}
return new JSONPathToken(JSONPathToken::T_INDEXES, $value);
}
if (preg_match('/^' . static::MATCH_SLICE . '$/x', $value, $matches)) {
$parts = explode(':', $value);
$value = ['start' => isset($parts[0]) && $parts[0] !== "" ? (int) $parts[0] : null, 'end' => isset($parts[1]) && $parts[1] !== "" ? (int) $parts[1] : null, 'step' => isset($parts[2]) && $parts[2] !== "" ? (int) $parts[2] : null];
return new JSONPathToken(JSONPathToken::T_SLICE, $value);
}
if (preg_match('/^' . static::MATCH_QUERY_RESULT . '$/x', $value)) {
$value = substr($value, 1, -1);
return new JSONPathToken(JSONPathToken::T_QUERY_RESULT, $value);
}
if (preg_match('/^' . static::MATCH_QUERY_MATCH . '$/x', $value)) {
$value = substr($value, 2, -1);
return new JSONPathToken(JSONPathToken::T_QUERY_MATCH, $value);
}
if (preg_match('/^' . static::MATCH_INDEX_IN_SINGLE_QUOTES . '$/x', $value, $matches)) {
$value = $matches[1];
$value = trim($value);
return new JSONPathToken(JSONPathToken::T_INDEX, $value);
}
if (preg_match('/^' . static::MATCH_INDEX_IN_DOUBLE_QUOTES . '$/x', $value, $matches)) {
$value = $matches[1];
$value = trim($value);
return new JSONPathToken(JSONPathToken::T_INDEX, $value);
}
throw new JSONPathException("Unable to parse token {$value} in expression: {$this->expression}");
}