我有一个代码:
$phrase = "hello";
SELECT (...) WHERE x RLIKE '[[:<:]]$phrase[[:>:]]'
但是当我想在最后搜索带空格的短语时:
$phrase = "hello ";
搜索没有返回任何内容
我该如何解决?
答案 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
:
SELECT (...) WHERE x LIKE '%$phrase%'
或
SELECT (...) WHERE x LIKE CONCAT('%', $phrase, '%')
如果您仍想确保搜索词组不会出现在字词之间,请使用
SELECT (...) WHERE x RLIKE CONCAT('(^|[^[:alpha:]])', $phrase, '($|[^[:alpha:]])')
另一种方法:只需保留[[:<:]]
前导字边界,然后删除尾随 [[:>:]]
一个。
答案 3 :(得分:0)
在使用$短语之前,请执行
$phrase = trim($phrase);