MySQL REGEXP搜索多个单词

时间:2017-03-16 14:44:11

标签: mysql regex select

字段Products.Name包含PETISCO NESTLE PURINA DOG CHOW CARINHOS MIX DE FRUTAS

我需要搜索单词DOG和单词NESTEL(错误的单词),但前三个字母是正确的。
我不知道这些词的顺序。

我尝试过像REGEXP '[^DOG][^NESTEL]{3}'这样的事情,但不起作用!

感谢

更新1:

当用户键入DOG和NESTEL时,我希望我的应用程序显示包含单词DOG和NESTLE的所有产品,甚至部分单词也是错误的!

更新2:

where Products.Name REGEXP '[[:<:]]?=*NES.*[[:>:]]' and Products.Name REGEXP '[[:<:]]?=*DOG.*[[:>:]]'

这显示了狗E NES但是如果用户输入NESTEL而不是NESTLE?

3 个答案:

答案 0 :(得分:0)

你需要mys {的levenshtein function。它根据它与搜索词(即NESTEL)的相似性来评估它们的所有结果,并将它们与该额外比率字段一起返回。然后你只需要选择比率更高的那个,或者选择更相似的那个......等等。

答案 1 :(得分:0)

SELECT ...
    FROM ...
    WHERE Name REGEXP '[[:<:]]dog[[:>:]]'
      AND Name REGEXP '[[:<:]]nes';
  • 你想要&#34;狗&#34;成为一个&#34;字&#34;,因此这个词是边界的东西。
  • 你想要一些&#34;字&#34;从&#34; nes&#34;开始,因此只有word-start thingie。
  • 它不检查&#34; nes ...&#34;中的6个字母,那将是

      AND Name REGEXP '[[:<:]]nes[a-z]{3}[[:>:]]';
    

可能是整理问题;请提供SHOW CREATE TABLE

迷你课:

  • [^DOG]说&#34;匹配1个字节,但不是D,也不是O,也不是G
  • [^NESTEL]{3}表示匹配3个字节,但它们不能是这6个字母中的任何一个。
  • MySQL不处理任何使用?
  • 启动的运算符
  • NES.*[[:>:]]匹配NES,后跟字符串的其余部分 - 这是因为*是&#34;贪心&#34;并且[[:>:]]将匹配字符串的结尾。
  • LIKE&#39;%dog%nes%&#39;没有测试单词边界。
  • nes***作为正则表达式会说ne后跟任意数量的s,包括零。
  • nes...将匹配nes加上任意类型的3个字节。所以,它只是说nes不能太靠近字符串的末尾。

答案 2 :(得分:-1)

WHERE some_col LIKE '%dog%nes%' or some_col LIKE '%nes%dog%'