Mysql匹配带括号边界的单词

Mysql匹配带括号边界的单词,mysql,regex,Mysql,Regex,我有这张桌子: mysql> SELECT * FROM test; +----+---------------+ | id | duma | +----+---------------+ | 1 | bbb ccc ddd | | 2 | bbb (ccc) ddd | | 3 | ccc ddd eee | | 4 | (ccc) ddd eee | | 5 | aaa bbb ccc | | 6 | aaa bbb (ccc) | | 7

我有这张桌子:

mysql> SELECT * FROM test;
+----+---------------+
| id | duma          |
+----+---------------+
|  1 | bbb ccc ddd   |
|  2 | bbb (ccc) ddd |
|  3 | ccc ddd eee   |
|  4 | (ccc) ddd eee |
|  5 | aaa bbb ccc   |
|  6 | aaa bbb (ccc) |
|  7 | bbb(ccc)ddd   |
|  8 | (ccc)dddeee   |
|  9 | aaabbb(ccc)   |
+----+---------------+
9 rows in set (0.00 sec)
我只想将ccc字符串作为单词进行匹配,所以我希望看到结果中的第2、4和6行。我试过theese:

mysql> SELECT * FROM test WHERE duma REGEXP '[[:<:]](ccc)[[:>:]]';
+----+---------------+
| id | duma          |
+----+---------------+
|  1 | bbb ccc ddd   |
|  2 | bbb (ccc) ddd |
|  3 | ccc ddd eee   |
|  4 | (ccc) ddd eee |
|  5 | aaa bbb ccc   |
|  6 | aaa bbb (ccc) |
|  7 | bbb(ccc)ddd   |
|  8 | (ccc)dddeee   |
|  9 | aaabbb(ccc)   |
+----+---------------+
9 rows in set (0.00 sec)
好的,括号是模式字符,我试图转义它:

mysql> SELECT * FROM test WHERE duma REGEXP '[[:<:]]\\(ccc\\)[[:>:]]';
Empty set (0.00 sec)

mysql> SELECT * FROM test WHERE duma REGEXP '[[:<:]][(]ccc[)][[:>:]]';
Empty set (0.00 sec)

有什么解决办法吗?

对于这种单词搜索,您可以像这样使用

 SELECT * FROM test WHERE duma like '%(ccc)%';

对于这种单词搜索,您可以使用

 SELECT * FROM test WHERE duma like '%(ccc)%';
此处不需要REGEXP,您只需使用:

SELECT * FROM test
WHERE duma LIKE '%(ccc)%';
此处不需要REGEXP,您只需使用:

SELECT * FROM test
WHERE duma LIKE '%(ccc)%';

撇开Escape madness不谈,括号不是单词字符,因此单词边界标记将不匹配。发件人:

这些标记代表单词的边界。它们匹配开头和结尾 分别是单词的结尾。单词是一系列单词字符 前面或后面没有单词字符的。一句话 字符是alnum类中的字母数字字符或 下划线


撇开Escape madness不谈,括号不是单词字符,因此单词边界标记将不匹配。发件人:

这些标记代表单词的边界。它们匹配开头和结尾 分别是单词的结尾。单词是一系列单词字符 前面或后面没有单词字符的。一句话 字符是alnum类中的字母数字字符或 下划线

您可以使用like with或来覆盖所需的空间

 SELECT * FROM test 
 WHERE duma LIKE '(ccc) %' 
 OR duma LIKE '% (ccc)' 
 OR duma LIKE '% (ccc) %'
您可以使用like with或来覆盖所需的空间

 SELECT * FROM test 
 WHERE duma LIKE '(ccc) %' 
 OR duma LIKE '% (ccc)' 
 OR duma LIKE '% (ccc) %'
这可能比3个喜欢的OR更快

您对单词的定义是在每一侧都有空格或字符串的开头/结尾。这不是传统的定义,所以到目前为止给出的所有答案,包括我的答案,都不符合传统的定义

这可能比3个喜欢的OR更快


您对单词的定义是在每一侧都有空格或字符串的开头/结尾。这不是传统的定义,所以到目前为止给出的所有答案,包括我的答案,都不符合传统的定义。

你必须使用正则表达式吗?为什么不从杜马喜欢的“%ccc%”的测试中选择*呢?对不起,我编写了错误的示例表数据。现在我更正了。你必须使用正则表达式吗?为什么不从杜马喜欢的“%ccc%”的测试中选择*呢?对不起,我编写了错误的示例表数据。现在我改正了。