2016-08-03 181 views
2

我有一个创建查询的搜索函数。我的目标是搜索确切的单词,所以如果短语是'hello',它应该只返回'hello'的结果(而不是'xhello','helloxx'等)。我的代码如下所示:SQL正则表达式中的特殊字符 - 与特殊字符匹配字边界

SELECT (...) WHERE x RLIKE '[[:<:]]word[[:>:]]' 

而且它适用于大多数的情况下,但是当这句话是F.E. 问题开始'$ hello'或'hello'等 - 特殊字符破坏了功能。

有没有办法处理它?

+0

您可以检查这个词的应用耳朵在字符串的开始/结尾,如果它被空格包围:'RLIKE'(^ | [[:space:]])字([[:space:]] | $)'' –

+1

Wiktor - 不工作 – user6671488

+0

它怎么不“工作”?请参阅https://regex101.com/r/dX5aV9/1。这是工作*。 –

回答

0

尝试

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

SELECT * FROM table WHERE x RLIKE '(^|)Hello(|$)' 

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

SELECT * FROM test WHERE name REGEXP '(^|)Hello(|$)' 
+0

OP已经声明那些[“不工作”](http://stackoverflow.com/questions/38739216/special-chars-in-sql-regex#comment64853436_38739216)。 –

+0

rlike和正则表达式之间的区别是什么? – user6671488

+0

两者都是一样的。请参阅[正则表达式](http://dev.mysql.com/doc/refman/5.7/en/regexp.html) – zakhefron