Как разобрать строку поиска пользователя для запроса Postgresql?

1

Я создал поисковую систему на своем сайте, используя полнотекстовый поиск в Postegresql. я добавил поисковый запрос на моей странице PHP, в которой пользователи могут писать строки, подобные этим:

word1 +word2
word1+word2
word1    -word2
 word1-word2
word1 word2
word1  word2

как преобразовать их в следующие строки?

word1&word2
word1&word2
word1&!word2
word1&!word2
word1|word2
word1|word2

Я попробовал несколько решений, но никто не работает со всеми случаями. Последнее, что я пробовал, следующее:

    $user_query_string = trim($_GET['search']);
    $final_query_string = str_replace(array('+', ' ', '-'), array('&','|', '&!'), $user_query_string);
Теги:
parsing
full-text-search
logical-operators

1 ответ

2
Лучший ответ

Попробуй это:

$a=array('word1 +word2','word1+word2','word1    -word2',' word1-word2','word1 word2','word1  word2');

foreach ($a as &$v) {
  $v=preg_replace('/ +/','|',        // last: change blanks to |
     preg_replace('/ *(?=[!&])/','', // delete blanks before ! or &
     strtr(trim($v),array('-'=>'&!','+'=>'&'))  // turn + and - into & and !&
     ));
}
print_r($a);

Это даст:

Array
(
    [0] => word1&word2
    [1] => word1&word2
    [2] => word1&!word2
    [3] => word1&!word2
    [4] => word1|word2
    [5] => word1|word2
)
  • 0
    Сработало нормально! Спасибо вам большое!
  • 0
    Добро пожаловать ;-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню