PHP Операторы поиска, как использовать?
1. Распознаём корректно токены.
2. Обрабатываем результат логических выражений в соответствии с приоритетами операций.
У Вас п.1 - не выполнен!
Ап, может кто-то еще что-то может подсказать? 
Пока есть такой вариант:private function getMatchWithSeparator($string){
        $regexps = [
            '/="(.*?)"/',
            '/!"(.*?)"/',
            '/"(.*?)"/',
            '/!(.*?) /',
            '/=(.*?) /',
            '/ (.*?) \| (.*?) /'
        ];
        $count = 0;
        $array_replace = [];
        foreach($regexps as $regexp){
            $string = preg_replace_callback(
                $regexp,
                function($matches) use (&$array_replace, &$count){
                    $count++;
                    $array_replace['str'.$count] = str_replace($matches[1], Yii::$app->sphinx->escapeMatchValue($matches[1]),$matches[0]);
                    return 'str'.$count;
                },
                $string);
        }

        $string = Yii::$app->sphinx->escapeMatchValue($string);

        foreach($array_replace as $key => $item){
            $string = str_replace($key, $item, $string);
        }

        return $string;
    }
Но проблема когда в строке нету больше слов кроме с условием "не", например:
!Привет
!Привет "