Пример #1
0
 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);
 }