PHP + mySQL - 匹配确切的单词

时间:2011-04-13 14:37:25

标签: php mysql regex word match

我在mysql数据库中有一些文本,我正在使用此查询尝试将查询中的确切单词与php匹配:

$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!”

2 个答案:

答案 0 :(得分:2)

最终更新

好的,我能够看看并运行一些测试。最终让这个工作:

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

只需在[]内添加更多标点符号,并注意转义那些需要转义的项目。

让我知道任何问题。 (我不知道这是否是处理它的最好方法,但确实有效)。也就是说,如果有人有任何建议让我知道,我会相应地修改它。


<强>更新

好吧,做一些阅读成为你想要的东西:

WHERE plainText REGEXP'\ s“。$ palavra。”[!。] {1} \ s'

我不是100%的正则表达式,可能需要调整。对于我使用MySQL Manual for REGEXP的信息。如果我有机会测试/调整它,我会的。祝你好运。


旧答案: 为什么不使用LIKE而不是正则表达式?

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

应该这样做,只需在单词前后添加空格即可。

答案 1 :(得分:0)

你为什么不试试

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

我不明白你的正则表达式,所以,我很抱歉,但我无法回答为什么你匹配“aquecimentos”

  
    

我也可以说“aquecimento。”这样的话,我想要回归或“aquecimento!”

  
在这种情况下,

REGEXP将是:

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

这意味着,在$ palavra之前和之后都允许使用“和'。如果!在palavra之后是正确的,那也没关系。

我没有测试它,但我认为它会起作用。

相关问题