我的sql搜索使用正则表达式:
$sql = " select * from table where regexp CONCAT('[[:<:]]', :searchTerm, '[[:>:]]') ";
:searchTerm是一个绑定搜索变量。
目前,如果执行我对“井”这个词的搜索,会出现一堆结果。但是,如果我用逗号搜索“Well”,则查询结果为空。
我假设发生这种情况是因为'[[:&lt ;:]]'和'[[:&gt;:]]'是单词边界标记,因此,忽略所有标点符号。
有谁知道如何构建查询以包含标点符号?
答案 0 :(得分:0)
您可以使用内置标点字符类[:punct:]
来匹配标点字符,后跟?
,它将匹配前面的零个或一个字符或字符类 - 在这种情况下它将是你定义的角色类。
例如:
$sql = "select * from table where regexp CONCAT('[[:<:]]', :searchTerm, '[[:punct:]]?[[:>:]]') ";
这是公平的警告,我对MySql没有多少经验,我没有发表上面的例子。这应该有效,或者至少指向正确的方向。您可以找到有关mysql文档的Regular Expression Operators部分的更多信息。
此外,我不确定内置标点字符类中包含哪些字符,但您可以使用方括号定义自己的字符,只需包含所需的标点字符。例如[,.!?;:]