private function parseTarget($target) { $tokenList = $this->getTokenList(); $tokenReg = join('|', array_map(function ($token) { return preg_quote($token, '/'); }, array_merge($tokenList, [" "]))); $tokens = preg_split('/(' . $tokenReg . ')/', $target, null, PREG_SPLIT_DELIM_CAPTURE); $tmp = []; if (empty($tokens[0])) { array_shift($tokens); } $last = array_pop($tokens); if (!empty($last)) { array_push($tokens, $last); } $this->setTargetTokens($target, $tokens); foreach ($tokens as $key => $token) { if (in_array($token, $this->getKeywords())) { $tmp[] = $token; } else { if (in_array($token, $tokenList)) { $tmp[] = Patterns::getTokenPattern($token); } else { $pattern = Patterns::match($token); if (!$pattern) { if (isset($tokens[$key + 1])) { $pattern = Patterns::getAntiPattern($tokens[$key + 1]); } else { $pattern = Patterns::getAsteriskPattern(); } } $tmp[] = $pattern; } } } $this->setTargetPatterns($target, $tmp); }