Ап, может кто-то еще что-то может подсказать?
Пока есть такой вариант:
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;
}
Но проблема когда в строке нету больше слов кроме с условием "не", например:
!Привет
!Привет "