我在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!”
答案 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之后是正确的,那也没关系。
我没有测试它,但我认为它会起作用。