PHP:如何分析搜索表达式并检索值?

时间:2011-02-27 06:10:37

标签: php mysql sql regex


我正在尝试构建一个搜索系统并检索匹配的记录。在这种情况下..我想让用户使用一些特殊的字符来准确地建立他们的请求。所以我把这些标志,然后将它们转换为正确的SQL:
+ 应转换为 AND
/ 应转换为 OR
应转换为
例如,当用户输入时:“book / pen”+ paper
它应该转换为SQL WHERE子句:
((myfield LIKE“%book%”)或(myfield LIKE“%pen%”))AND(myfield LIKE“%paper%”)
我用开关盒和数组实现了这个..但我想还有另一种快速的方法(例如regEx)。你有什么想法解决它吗?

注意1:我应该从此表达式中收集所有术语并将其保存在另一个表中。所以,我需要将它们收集在一个数组中 注2:条款可以使用所有世界语言编写!从英语到阿拉伯语,波斯语,...可能是中国人!!!!

感谢

2 个答案:

答案 0 :(得分:1)

尝试使用:

$str = '"book/pen"+paper';
// First: replace all keywords (assuming they don't contain " / + by SQL LIKE
$str = preg_replace('#([^"/+]+)#', "(myfield LIKE '%$1%')", $str);
// then replace / by OR
$str = preg_replace("#/#", " OR ", $str);
// then replace + by AND
$str = preg_replace("#\+#", " AND ", $str);
// and finaly replace pair of "" by ()
$str = preg_replace('/"([^"]+)"/', "($1)", $str);
echo $str,"\n";

<强>输出:

((myfield LIKE '%book%') OR (myfield LIKE '%pen%')) AND (myfield LIKE '%paper%')

答案 1 :(得分:0)

考虑到您的示例“书/笔”+纸张,以下步骤应该有效。

    $sourceQuery = '"book/pen"+paper';
    $targetQuery = preg_replace(
                   '/^"(.*)[//](.*)"[/+](.*)$/',
                   '( (myfield LIKE "%$1%") OR (myfield LIKE "%$2%") ) AND ( myfield LIKE "%$3%")',
                   $sourceQuery);

要匹配源查询中某个位置的多个运算符,请使用[\ | +]等模式范围 阅读preg_replace以匹配您希望使用的任何类型的模式。

对于语言问题,请在使用非英语时遇到任何问题。