Como analisar a seqüência de pesquisa do usuário para a consulta Postgresql?

Eu criei um mecanismo de pesquisa no meu site usando a pesquisa de texto completo no Postegresql. Eu adicionei uma checkbox de pesquisa na minha página PHP em que os usuários podem escrever strings como estes:

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

como convertê-los para as seguintes cordas?

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

Eu tentei várias soluções, mas nenhuma delas funciona com todos os casos. O último que eu tentei é o seguinte:

  $user_query_string = trim($_GET['search']); $final_query_string = str_replace(array('+', ' ', '-'), array('&','|', '&!'), $user_query_string); 

Tente isso:

 $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); 

Isso dará:

 Array ( [0] => word1&word2 [1] => word1&word2 [2] => word1&!word2 [3] => word1&!word2 [4] => word1|word2 [5] => word1|word2 )