php
  • mysql
  • regex
  • word
  • match
  • 2011-04-13 126 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

    相关问题