Mysql SQL正则表达式中的特殊字符-用特殊字符匹配单词边界

Mysql SQL正则表达式中的特殊字符-用特殊字符匹配单词边界,mysql,sql,regex,Mysql,Sql,Regex,我有一个搜索函数,可以创建查询。我的目标是搜索准确的单词,所以如果短语是“hello”,它应该只返回带有“hello”的结果(而不是带有“xhello”、“helloxx”等)。我的代码如下所示: SELECT (...) WHERE x RLIKE '[[:<:]]word[[:>:]]' 选择(…)其中x类似“[[::]” 它适用于大多数情况,但是 当短语是f.e.‘hello’或‘helloŁ’等时,问题就开始了——特殊字符破坏了功能 有办法处理吗?试试看 SELECT *

我有一个搜索函数,可以创建查询。我的目标是搜索准确的单词,所以如果短语是“hello”,它应该只返回带有“hello”的结果(而不是带有“xhello”、“helloxx”等)。我的代码如下所示:

SELECT (...) WHERE x RLIKE '[[:<:]]word[[:>:]]'
选择(…)其中x类似“[[::]”
它适用于大多数情况,但是 当短语是f.e.‘hello’或‘helloŁ’等时,问题就开始了——特殊字符破坏了功能

有办法处理吗?

试试看

SELECT * FROM table WHERE x RLIKE '(^|[[:space:]])Hello([[:space:]]|$)'


您可以检查单词是否出现在字符串的开头/结尾,以及是否被空格包围:
RLIKE'(^[space:]])单词([[space:]].$)
Wiktor-仍然不起作用它怎么不“起作用”?看见它正在工作。
$hello
确实匹配
RLIKE'[[::]]'
。因为
Ł
是一个字母,所以它会失败。请详细说明你对“单词”是什么/不是什么的所有规则。OP已经说明了这些规则。rlike和regexp之间的区别是什么?两者都是相同的。参考
SELECT * FROM table WHERE x RLIKE '(^| )Hello( |$)'
SELECT * FROM table WHERE x REGEXP '(^|[[:space:]])Hello([[:space:]]|$)'
SELECT * FROM test WHERE name REGEXP '(^| )Hello( |$)'