【问题标题】:PHP + mySQL - Match exact wordPHP + mySQL - 匹配确切的单词
【发布时间】:2011-04-13 14:37:24
【问题描述】:

我在 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!”

【问题讨论】:

  • 如果你想要一个完全匹配,你不应该首先使用正则表达式。使用like,这样更快,并在词尾添加一个空格字符以避免复数。

标签: php mysql regex word match


【解决方案1】:

最终更新

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

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

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

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


更新

好的,阅读一下这篇应该就是你要找的:

WHERE 纯文本正则表达式 '\s".$palavra."[!.]{1}\s'

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


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

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

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

【讨论】:

  • 感谢您的回答,但我正在使用正则表达式,因为它应该可以工作:) 我也可以使用我想返回的“aquecimento。”或“aquecimento!”之类的词以及 LIKE我可以。
  • @Alexandre:您应该将其添加到原始帖子中,然后避免您知道无效的答案。
  • @Brad F Jacobs:试过这个,但现在它没有返回任何东西......谢谢你的帮助。我想我会以错误的方式进行操作,并根据字符数组检查单词之后和之前的字符...
  • @Alexandre Mota,进行了最后更新。告诉我进展如何。
【解决方案2】:

你为什么不试试

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

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

我也可以有像“aquecimento.”这样我想返回的词或“aquecimento!”

在这种情况下,REGEXP 应该是:

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

这意味着," 和 ' 在 $palavra 之前和之后都是允许的。如果 ! 在 palavra 之后是 RIGHT 也可以。

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

【讨论】:

  • aquecimento 是一个葡萄牙语单词:D
  • 我想 :) 我无法理解这部分:[[:<:>
猜你喜欢
  • 1970-01-01
  • 2023-01-16
  • 2020-11-12
  • 2019-10-23
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多