2017-03-16 167 views
0

领域Products.Name包含PETISCO NESTLE PURINA DOG CHOW CARINHOS MIX DE FRUTASMySQL的REGEXP搜索多个单词

我需要寻找德字DOG和字NESTEL(错一个字),但前三个字母是正确的。
我不知道单词的顺序。

我试过像这样的相同的东西REGEXP '[^DOG][^NESTEL]{3}',但不起作用!

感谢

更新1:

当用户键入DOG和NESTEL我想我的应用程序,以显示包含单词DOG和雀巢的所有产品,甚至是单词的一部分是错误的!

更新2:

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

这说明我的dog电子NES,但如果用户键入NESTEL而不是雀巢?

+0

你能解释一下这个问题吗? '[DOG]'是非'd','o'或'g'字符。 – chris85

+0

MySQL的'REGEXP'不支持lookaround断言。 –

+0

以单词DOG和NES开头*** –

回答

-1
WHERE some_col LIKE '%dog%nes%' or some_col LIKE '%nes%dog%' 
+0

word dog AND nes *** –

+0

不理解反对票 - 我的猜测和任何人一样好,因为他不清楚他想要什么或他的数据是什么样子。吉兹。 – user3741598

+0

不是我的投票,但答案不应该是猜测。答案也应该包括一个解释。 – chris85

0

您需要mysql的levenshtein function。它会根据与搜索到的单词(即NESTEL)的相似性对所有结果进行评估并返回到额外比率字段。然后你只需要选择一个具有较高比例,或者与那些更类似于一个列表...等

0
SELECT ... 
    FROM ... 
    WHERE Name REGEXP '[[:<:]]dog[[:>:]]' 
     AND Name REGEXP '[[:<:]]nes'; 
  • 你想要的“狗”是“字”,因此字边界事物。
  • 你想要一些以“nes”开头的“单词”,因此只有单词开始thingie。
  • 它不会为您在 “网元......” 6个字母,这将是

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

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

迷你课程:

  • [^DOG]说:“比赛1个字节,但不D,也不O,也不G
  • [^NESTEL]{3}说严丝合缝3个字节,但他们不能有任何的6个字母的。
  • MySQL不处理任何运营商_开始与?
  • NES.*[[:>:]]匹配NES,然后字符串的其余部分 - 这是因为*是“贪婪”,并且[[:>:]]将匹配字符串的结尾。
  • LIKE'%dog%nes%'没有针对单词边界的测试。
  • nes***作为正则表达式会说ne其次是任何数字s,包括零。
  • nes...将匹配nes加上任何类型的3个字节。所以,它说的是nes一定不能太接近字符串的末尾。