首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mysql中使用REGEXP来匹配文本中的单词

问如何在mysql中使用REGEXP来匹配文本中的单词
EN

Stack Overflow用户
提问于 2017-04-07 05:23:16
回答 3查看 77关注 0票数 0

我有一个mysql查询,类似于:

代码语言:javascript
复制
SELECT name FROM table_name WHERE name LIKE '%custom%' limit 10

它从我的自定义表中返回2行。

我想从文本c cu cus cust usto stom tom om m中得到包含任何一个单词的记录。

我尝试了以下查询:

代码语言:javascript
复制
SELECT name FROM table_name WHERE name like '%custom%' OR name REGEXP 'c|cu|cus|cust|usto|stom|tom|om|m' limit 10

上面的查询返回我7条记录,但这7条记录没有第一次查询结果所包含的2条记录。

怎么弄到?或者其他在mysql中获得这些结果的方法?

编辑:在这里,我还希望在第二个查询中按最大子字符串匹配排序。

EN

回答 3

Stack Overflow用户

发布于 2017-04-07 05:29:25

试试这个:

代码语言:javascript
复制
SELECT name FROM table_name WHERE name REGEXP 'custom' limit 10;

不需要LIKE和REGEXP,但是REGEXP比喜欢慢。因此,如果您的表有那么多记录,那么REGEXP问题就会慢一些。

票数 0
EN

Stack Overflow用户

发布于 2017-04-07 05:33:54

试试这个:

代码语言:javascript
复制
SELECT name FROM table_name WHERE name REGEXP 'custom|c|cu|cus|cust|usto|stom|tom|om|m' limit 10

我们上面所做的是将custom与其他模式结合起来,并使它们都使用REGEXP。

票数 0
EN

Stack Overflow用户

发布于 2017-04-07 05:38:43

您需要添加单词边界,在MySQL中,单词的开头是[[:<:]],词尾是[[:>:]]:

代码语言:javascript
复制
SELECT name
FROM table_name
WHERE name REGEXP '[[:<:]](c|cu|cus|cust|usto|stom|tom|om|m)[[:>:]]'
limit 10

见现场演示。

注意交替前后的括号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43270263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档