Я пытаюсь создать строку поиска, которая может принимать запрос, подобный следующему:
$string = 'title -launch category:technology -tag:news -tag:"outer space"$';
Вот краткое объяснение того, что я хочу сделать:
$ = suffix indicating that the match should be exact
" = double quotes indicate that the multi-word is taken as a single keyword
- = a prefix indicating that the keyword is excluded
Вот мой текущий синтаксический анализатор:
$string = preg_replace('/(\w+)\:"(\w+)/', '"${1}:${2}', $string);
$array = str_getcsv($string, ' ');
Я использовал этот код выше, но он не работает должным образом с ключевыми словами, начинающимися при поиске, подобном -tag: "космическое пространство" ,Приведенный выше код не распознает строки, начинающиеся с символа -, и разбивает ключевое слово в пробеле между external и space , несмотря на то, что заключено в двойные кавычки.
РЕДАКТИРОВАТЬ: я пытаюсь сделать с этим кодом preg_replace -tag: "космическое пространство" в "-tag: космическое пространство", чтобы они не были разбиты, когда я передаю строку в str_getcsv ().