php
  • mysql
  • regex
  • word
  • match
  • 2011-04-13 137 views 0 likes 
    0

    我在MySQL數據庫中的一些文字,我使用此查詢,試圖在查詢中使用PHP搭配一個確切的詞:PHP + MYSQL - 精確匹配字

    $palavra = "aquecimento"; 
    
    $query = "SELECT * FROM webqda_fontesInt_text WHERE plainText REGEXP '[[:<:]]" . $palavra . "[[:>:]]' AND projectoId='$projectoId' AND reciclagem='0' AND id='$id' GROUP BY id"; 
    

    是否有人可以給我解釋一下爲什麼會返回像「aquecimento」,「aquecimentos」,「desaquecimentos」這樣的記錄?

    我只想返回完全匹配,但它不像它應該那樣工作。

    預先感謝您!


    更多信息

    我也能有像 「」 aquecimento。」我想回到或 「aquecimento!」 話

    +3

    如果你想要一個精確的匹配,你不應該使用正則表達式。使用像,這是更快,並在單詞的末尾添加一個空格字符以避免複數。 – Andre 2011-04-13 14:43:45

    回答

    2

    最後更新

    好,我能夠看看並進行一些測試。最終得到了這個工作:

    WHERE plainText RLIKE '[ ]".$palavra."[?!.,]?[ ]' 
    

    只需在[]內添加更多標點符號並留意逃脫那些需要轉義的物品。

    讓我知道任何問題。 (我不知道這是否是處理它的最好方法,但它確實有效)。這就是說,如果任何人有任何建議讓我知道,我會相應地修改它。


    更新

    好吧,做一些閱讀本應該是你在找什麼:

    明碼REGEXP「\ S 「$ palavra」[! ] {1} \ s'

    我不是100%的正則表達式,可能需要調整。有關我使用的信息MySQL Manual for REGEXP。如果我有機會測試/調整它,我會的。祝你好運。


    老答案: 爲什麼不直接使用LIKE,而不是正則表達式?

    WHERE plainText LIKE '% ".$palavra." %' 
    

    應該這樣做,只需在詞的前後添加空格即可。

    +0

    謝謝你的回答,但是我使用的是正則表達式,因爲它應該可以工作:)另外,我可以有像「」aquecimento「這樣的詞,我想要返回或」aquecimento!「,並且可以像我一樣。 – 2011-04-13 14:46:08

    +0

    @Alexandre:您應該將其添加到原始文章中,然後避免您知道的解決方案無效。 – 2011-04-13 14:47:48

    +0

    @Brad F Jacobs:謝謝 – 2011-04-13 14:50:00

    0

    你爲什麼不嘗試

    "REGEXP '\s".$palavra."\s'" 
    

    我不明白你的正則表達式,那麼,我很抱歉,但我不能回答你爲什麼匹配「aquecimentos」

    此外,我可以有像「」aquecimento。「,我想要返回或」aquecimento!「

    REGEXP在這種情況下會一直是:

    REGEXP '\s[\"\\']+".$palavra."(!)?[\"\\']+\s' 
    

    這意味着,」 和'之前和$ palavra後允許。如果!在palavra之後是正確的。

    我沒有測試它,但我認爲它會工作。

    +0

    aquecimento是一個葡萄牙語單詞:D – 2011-04-13 14:47:23

    +0

    我想了:)我不明白這個部分:[[:<:]]和爲什麼你需要這個(我可以假設,你試圖告訴在你的w之前和之後ord應該是空格,但是正則表達式中的空格是\ s) – Nemoden 2011-04-13 14:52:46

    相關問題