目录
一、使用正则表达式进行基本字符匹配
1.使用regexp关键字
2.使用正则表达式 .
二、进行OR匹配
1.为搜索两个串之一,使用 |
2.匹配几个字符之一[]
3.匹配范围
4.匹配特殊字符
过滤数据允许使用匹配、比较、通配符操作来寻找数据,但是随着过滤条件的复杂性增加,WHERE子句本身的复杂性也有必要增加。
正则表达式就是用来匹配文本的特殊字符串(字符集合)。如果想从一个文本文件中提取出来电话号码就可以使用正则表达式。所有种类的程序设计语言、文本编辑器、操作系统等都支持正则表达式。
一、使用正则表达式进行基本字符匹配
示例:在列phone中寻找包含666的所有行
1.使用regexp关键字
输入:select phone from t_user where phone regexp '666' order by phone;
输出:
以上例子关键字like被regexp替代,看上去非常像like的语句,但是这个语句告诉mysql:regexp后所跟的东西为正则表达式处理。
2.使用正则表达式 .
. 是正则表达式语言中一个特殊的字符,它表示匹配任意一个字符。
示例:找出表中email列中包含“.com”的行
输入:select email from t_user where email regexp '.com' order by email;
输出:
注意:MySQL中的正则表达式匹配不区分大小写(即,大写、小写 都匹配)。为区分大小写,可以使用BINARY关键字,如:where name regepx binary 'JanePack'。
二、进行OR匹配
1.为搜索两个串之一,使用 |
示例:寻找表t_user中phone列包含6 或 8 的列
输入:select phone from t_user where phone regexp '6|8' order by phone;
输出:
| 为正则表达式的OR符号。它表示匹配其中之一,因此6和8都匹配并返回。类似于select语句中的OR语句。
2.匹配几个字符之一[]
如果只想匹配特定的字符,可以通过一组 [和] 括起来的字符来完成。
示例:寻找email列中 .com前是3和q的行
输入:select email from t_user where email regexp '[q3].com' order by phone;
输出:
[]是另一种形式的OR语句。正则表达式[q3].com是[q|3].com的缩写,两个都可以使用。但是后者需要用[]来定义OR语句查找。
3.匹配范围
集合可以用来定义要匹配的一个或多个字符。例如[123456789],为了简化这种类型的集合,可以使用 - 来定义一个范围,比如:[1-9],且匹配范围不一定是数值的,也可以是[a-z]。
示例:在t_user表中寻找id在1-4范围内的name行和email行
输入: select name,email from t_user where id regexp '[1-4]';4]';
输出:
4.匹配特殊字符
为了匹配特殊字符,必须用 \\ 作为前导。\\-表示查找- ,\\.表示查找 . 。
示例:找出t_user表中email列中有.的name行
输入:select name from t_user where email regexp '\\.' order by name;
输出:
更多 \\ 来引用的字符:
\\f | 换页 |
\\n | 换行 |
\\r | 回车 |
\\t | 制表 |
\\v | 纵向制表 |
注意:为了匹配反斜杠(\)字符本身,需要使用(\\\)。