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

时间:2017-04-07 05:23:16

标签: mysql regex

我有一个mysql查询,如:

SELECT name FROM table_name WHERE name LIKE '%custom%' limit 10

它从我的自定义表中重新排了两行。

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

我在下面尝试了查询:

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条记录没有第1条查询结果的2条记录。

如何获得?或者以其他方式将这些结果导入mysql?

编辑:在这里,我还希望通过第二次查询中的最大子串匹配进行排序。

3 个答案:

答案 0 :(得分:0)

试试这个:

SELECT name FROM table_name WHERE name REGEXP 'custom' limit 10;

LIKE不需要REGEXP,但REGEXP比LIKE慢。因此,如果您的表有这么多记录,那么REGEXP问题就会变慢。

答案 1 :(得分:0)

试试这个:

SELECT name FROM table_name WHERE name REGEXP 'custom|c|cu|cus|cust|usto|stom|tom|om|m' limit 10

我们上面所做的是我们将custom与其他模式结合起来,然后我们将它们全部用到REGEXP

答案 2 :(得分:0)

你需要添加单词边界,在MySQL中,[[:<:]]用于单词的开头,[[:>:]]用于单词的结尾:

SELECT name
FROM table_name
WHERE name REGEXP '[[:<:]](c|cu|cus|cust|usto|stom|tom|om|m)[[:>:]]'
limit 10

请参阅live demo

请注意更改周围的括号。