带有空格的SQL正则表达式单词

时间:2016-07-26 08:44:14

标签: php mysql sql regex

我有一个代码:

$phrase = "hello";

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

但是当我想在最后搜索带空格的短语时:

$phrase = "hello ";

搜索没有返回任何内容

我该如何解决?

4 个答案:

答案 0 :(得分:0)

对于MySql,您应该使用[[:space:]]来查找空白区域

"SELECT * FROM some_table WHERE some_field REGEXP '$phrase[[:space:]]'"

但是你 - 如果你的$短语已经包含一个空格,那么只需:

"SELECT * FROM some_table WHERE some_field like '%$phrase%'"

我不确定如何将$phrase的值分配到字符串中,但是对于sql部分应该如何工作

答案 1 :(得分:0)

如果要匹配最终字符代表短语结尾的模式,则可以使用$正则表达式分隔符:

SELECT ...
FROM yourTable
WHERE x REGEXP $phrase . '$'

假设该短语为"hello ",您希望匹配的正则表达式为hello $

答案 2 :(得分:0)

[[:>:]]是一个尾随字边界。当您通过"hello "时,生成的模式为'[[:<:]]hello [[:>:]]',这意味着它将匹配&#34;您好&#34;后跟一个尾随的单词边界 - 由于空格不是单词字符,所以不会发生这种情况。

使用LIKE

这里使用单词boundary是没有意义的
SELECT (...) WHERE x LIKE '%$phrase%'

SELECT (...) WHERE x LIKE CONCAT('%', $phrase, '%')

如果您仍想确保搜索词组不会出现在字词之间,请使用

SELECT (...) WHERE x RLIKE CONCAT('(^|[^[:alpha:]])', $phrase, '($|[^[:alpha:]])')

另一种方法:只需保留[[:<:]] 前导字边界,然后删除尾随 [[:>:]]一个。

答案 3 :(得分:0)

在使用$短语之前,请执行

$phrase = trim($phrase);