原标题:Mysql必知必会——使用正则表达式搜索(REGEXP)
本文主要介绍如何在 Mysql 中使用正则表达式进行搜索。
正则表达式是一个非常大的内容,我会在之后专门写博客介绍,这里只是简介一些常用匹配模式
博客文章地址:
简介
之前几篇文章讲解了各种各样的过滤数据条件,通过这些条件,我们已经能够满足日常开发中大部分的工作。但假设筛选条件更加复杂一点,比如你的老板叫你从邮箱+手机号码混合注册的用户中找出手机号码注册用户,要给他们发送营销短信。这时,之前的过滤方法就不太奏效。正则表达式搜索就派上大用场。
简单来说,正则表达式就是用来匹配文本的特殊字符串。比如,从文本中提取电话号码,带数字的用户名,或者提取某个特定格式的文本。
而且所有语言编辑器基本上都支持正则表达式,不得不说,正则表达式已经成为开发过程中强大而有力的工具。Mysql 也不例外,那么就开始正式学习这种特殊匹配方式。
本文所用到的 Mysql 表在文章最后的附录。
匹配字符串
匹配字符串是正则表达式最基础的应用。我们先给出一个例子:我们从一个用户表中查询出名字中包含有100数字的用户
SELECT * FROM my_user WHERE `name` REGEXP '100';
我们得到了用户ID为1的用户:小红100
该语句中不同于之前的语句,我们使用REGEXP关键字代表后面为正则表达式
这条语句看起来和LIKE语句特别相似,而且也是可以使用LIKE语句来实现。那使用正则表达式的意义何在?
原因很简单。假设,我现在需要匹配不仅仅是包含100数字的用户,而是100,200,或者300,只要是整百的都需要匹配。或者说,我需要所有名字里面包含数字的,无论什么数字。那么使用LIKE来实现就会显得十分的困难。而正则表达式就会显得十分简单。
SELECT * FROM my_user WHERE `name` REGEXP '.00'; // 匹配包含整百的名字,如100,200,300等等
表达式.00里面的点,代表的任意字符。也就是无论是1还是2还是9,或者是字母什么的都可以匹配,匹配任意。
SELECT * FROM my_user WHERE `name` REGEXP '[0-9]'; // 匹配所有名字里面包含数字的用户
是不是来