php - 如何解析 Postgresql 查询的用户搜索字符串?

标签 php postgresql parsing full-text-search logical-operators

我使用 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);

最佳答案

试试这个:

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

关于php - 如何解析 Postgresql 查询的用户搜索字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30760625/

相关文章:

PHP/MYSQL插入数组foreach循环

postgresql - 错误、系统查询、Postgresql 查询调试的不同日志文件

c++ - ifstream 的 operator>> 来检测行尾?

php - 如何通过 FTP 上传核心 PHP 文件而不打断网站访问者

php - 无法使用 PHP 连接到 MAMP 中的 MYSQL

php - 在php中显示日历上的当前日期数据

sql - PostgreSQL:在 GROUP BY 之后使用 LEAST() 命令实现第一笔交易

java - jOOQ 字段<T> = DSL.any(DSL.val(T...))

java - 使用 com.fasterxml.jackson 进行 yaml 解析

c++ - 当某些结构字段被省略或顺序与结构声明中的顺序不同时,如何实现正确的解析?