взрывая строку поиска - PullRequest
       3

взрывая строку поиска

0 голосов
/ 11 октября 2018

Я пытаюсь создать строку поиска, которая может принимать запрос, подобный следующему:

$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 ().

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Вы можете использовать preg_replace следующим образом:

 preg_replace('/(-?\w+:)"([^"]+)"/', '"$1$2"', $str);

См. PHP демо онлайн .

Регулярное выражение соответствует:

  • (-?\w+:) - Группа захвата 1: необязательный - (? соответствует 1 или 0 вхождениям), затем 1+ букв / цифр / подчеркиваний и :
  • " - aдвойная кавычка (будет удалена)
  • ([^"]+) - группа захвата 2: один или несколько символов, отличных от двойной кавычки
  • " - двойная кавычка

Шаблон замены: "$1$2": ", значение группы захвата 1, значение группы захвата 2 и ".

См. Демонстрационную версию регулярного выражения здесь .

0 голосов
/ 11 октября 2018

Вот как я это сделал:

$string = preg_replace('/(\-?)(\w+?\:?)"(\w+)/', '"$1$2$3', $string);
$array = str_getcsv($string, ' ');

Я рассматривал форматы как - "десятка" для цитируемых ключевых слов из нескольких слов, которые не имеют префикса категории / тега + двоеточия.

Извините за медлительность, я новичок в области регулярных выражений, php и программирования в целом, и это также мой первый пост в stackoverflow.Я пытаюсь научиться этому как личному хобби.Я рад, что сегодня узнал что-то новое.Я буду читать больше о регулярных выражениях, так как похоже, что они могут многое сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...