我正在搜索我的数据库。如果用户输入例如。 “foo bar”我想显示同时包含“foo”和“bar”的行。
我的SQL语法如下所示: SELECT * FROM t1 WHERE MATCH(t1.foo_desc,t2.bar_desc)AGAINST('+ foo * + bar *')
如何使用PHP中的正则表达式将用户输入“foo bar”更改为“+ foo * + bar *”?
答案 0 :(得分:2)
$match = '+' . implode('* +', explode(' ', $input)) . '*';
这假设输入不是空字符串;
编辑:正如@Bart S指出的那样,str_replace(或mb_str_replace,如果你正在处理多字节字符)会更简单......
$match = '+' . str_replace(' ', '* +', $input) . '*';
答案 1 :(得分:1)
您应该使用\b
和\B
来识别单词/非单词边界,从而插入您的+ / *。
答案 2 :(得分:1)
首先,修剪用户输入并删除任何奇怪的内容(标点符号,引号,基本上所有"\W"
,当然除了空格之外)。
然后,替换:
(?<=\w)\b
与
"*"
和
\b(?=\w)
与
"+"
答案 3 :(得分:1)
对于那些对MATCH感兴趣的人...如果您之前没有使用过它,那么语法This article是一个不错的起点。
答案 4 :(得分:0)
我会使用正则表达式来替换* +
之间的两个单词之间的空格:
'+' . preg_replace('/\s+/', '* +', trim($input)) . '*'
修改基本上这是what Tomalak said的实施,只有\s
而不是\W
。