我正在尝试使用正则表达式将用户输入的搜索字符串与MySQL数据库中条目的标题进行匹配。
例如,我在数据库中的表中有以下行:
id title
1 IM2 - Article 3 Funky Business
2 IM2 - Article 4 There's no Business That's not Show Business
3 IM2 - There's no Business That's not Show Business
4 CO4 - Life's a business
当用户搜索“IM Article Business”时,将执行以下查询(使用str_replace将空格替换为“(。*)”):
SELECT * FROM mytable WHERE title REGEXP 'IM(.*)Article(.*)Business'
这将返回前两行。
现在,我希望它在用户使用相同的单词时显示相同的结果,但是在另一个顺序中,例如:“Business IM Article”。结果必须包含输入的所有单词,只有输入单词的顺序无关紧要。
我无法弄清楚如何以任何方式做到这一点,并希望正则表达式将成为答案。我以前从未使用过它们,所以有人知道怎么做吗?
谢谢,
帕斯卡
答案 0 :(得分:4)
这不是正则表达式擅长的。幸运的是,这是SQL非常擅长的东西。 (我将不使用mysql的regexp关键字,我甚至不知道它存在,而是使用SQL标准“%”glob匹配。)
select * from mytable where title like '%IM%' and title like '%Article%' and title like '%Business%'
现在title
必须包含所有三个字符串,但您尚未指定订单。正是你想要的。