PHP:如何分析搜索表达式并检索值?
PHP:如何分析搜索表达式并检索值?,php,mysql,sql,regex,Php,Mysql,Sql,Regex,我正在尝试建立一个搜索系统并检索匹配的记录。在这种情况下。。我想让用户使用一些特殊的字符来准确地构建他们的请求。所以我把这些符号,然后把它们转换成正确的SQL: +应转换为ro和 /应转换为ro或 “应转换为ro(或) 例如,当用户输入时:“书/笔”+纸 应将其转换为SQL WHERE子句: ((myfield类似于“%book%”)或(myfield类似于“%pen%”)和(myfield类似于“%paper%”) 我用一个开关盒和数组实现了这一点。但是我想还有另一种快速的方法(比如regEx
我正在尝试建立一个搜索系统并检索匹配的记录。在这种情况下。。我想让用户使用一些特殊的字符来准确地构建他们的请求。所以我把这些符号,然后把它们转换成正确的SQL:
+应转换为ro和
/应转换为ro或
“应转换为ro(或)
例如,当用户输入时:“书/笔”+纸 应将其转换为SQL WHERE子句:
((myfield类似于“%book%”)或(myfield类似于“%pen%”)和(myfield类似于“%paper%”)
我用一个开关盒和数组实现了这一点。但是我想还有另一种快速的方法(比如regEx)。你有解决这个问题的想法吗?
注意1:我应该从这个表达式中收集所有术语,并将它们保存在另一个表中。因此,我需要将它们收集到一个数组中。
注2:术语可以用世界上所有语言书写!从英语到阿拉伯语、波斯语……可能是中文!!!!
谢谢考虑到您的示例“书/笔”+纸张,以下步骤应该可行
$sourceQuery = '"book/pen"+paper';
$targetQuery = preg_replace(
'/^"(.*)[//](.*)"[/+](.*)$/',
'( (myfield LIKE "%$1%") OR (myfield LIKE "%$2%") ) AND ( myfield LIKE "%$3%")',
$sourceQuery);
要在源查询中的一个位置匹配多个运算符,请使用[\\;+]
阅读有关匹配您希望使用的任何类型的模式的内容
对于语言问题,您在使用非英语语言时是否遇到过任何问题。尝试一下:
$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%')
和之间的区别是什么?引号表示括号,将覆盖表达式中运算符的定义优先级,但斜杠表示或SQL语法中的运算符。thx emaillenin..但我应该找到一种方法,可以在所有搜索表达式中回答,而不仅仅是此示例。太棒了。。。我测试它!适用于所有语言。但是由于注释1,有没有办法将所有“/”转换成像“然后分解字符串来检索所有单词”这样的字符?(例如“book/pen”+纸张转换成“book/pen/paper”)(例如“red sky/sunset”->“red sky/sunset”)thnx…我通过混合您的伟大方式和preg#u replace#callback()解决了这个问题检索每个术语并对其进行操作!您是最棒的:)