2017-03-16 137 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一定不能太接近字符串的末尾。