[TOC=1,5]
>[success] # 什么是regexp
>正则表达式是用来匹配文本的特殊的字符集合,如果想从一个文本文件中提 取电话号码,可以使用正则表达式来完成。
正则表达式的作用是匹配文本,将一个正则表达式与一个文本串进行比较, MySQL 用 where 子句对正则表达式提供支持,允许指定正则表达式过滤 select 查找出的数据。
<br>
* * * * *
>[success] # regexp和like区别
>在 where 中可以使用 LIKE 和 REGEXP 来匹配特定的内容,但是 LIKE 匹配 整列数据,REGEXP 可以匹配列中任意位置的文本,REGEXP 更灵活强大。
MySQL 中正则表达式不区分大小写。
* * * * *
>[success] # 语法
`在 where 子句中使用 REGEXP 关键字,后面接正则表达式字符 `
<br>
>[danger] ##### 包含文本匹配-regexp
`SELECT * FROM products WHERE prod_name REGEXP '100';`
**图片信息**:

**注**:
查询prod_name字段中包含100 的内容,如果条件换成10,1000等都会查出这条信息,因为都是包含关系
<br>
>[danger] ##### 或文本匹配-|
`SELECT * FROM products WHERE prod_name REGEXP '1000|2000';`
**图片信息**:

**注**:
当使用like做查询结果一致的操作语法
`SELECT * FROM products WHERE prod_name LIKE '%1000%' OR prod_name LIKE '%2000%';`
<br>
>[danger] ##### 文字中其中一个匹配-[]
`SELECT * FROM products WHERE prod_name REGEXP '[123] Ton';`
**图片信息**:

**注**:
正则表达式[123] Ton ,[123]定义一组字符,它的意思是匹配 1 或 2 或 3, 因此,1 ton 和 2 ton 都匹配并且返回。
<br>
>[danger] ##### 不匹配文字中任意一个-[^]
`SELECT * FROM products WHERE prod_name REGEXP '[^123] Ton';`
**图片信息**:

**注**:
和not的区别
`SELECT * FROM products WHERE prod_name NOT REGEXP '[123] Ton';`
这个语句的含义
除了1或2或3和ton组成的内容查询结果集
上面 我们用的非not是匹配到的 可能是5ton之类的反正开头不能是123,结尾必须是Ton
<br>
>[danger] ##### 匹配一个范围-[1-9] [a-z]
`SELECT * FROM products WHERE prod_name REGEXP '[1-5] Ton';`
**图片信息**:

**注**:
1.匹配一个范围,使用集合操作,[1-9] 表示匹配 1 到 9 之间的任意一个 数字,[a-z]表示匹配 a 到 z 之间的任意一个字符
2.不存在[1-311 ]1到311,只会匹配到1-3 和11
<br>
>[danger] ##### 匹配所有字符-.
`SELECT * FROM products WHERE prod_name REGEXP '.';`
**图片信息**:

**注**:
1. 小数点表示匹配所有
2. 如果想匹配小数点用转移符号//.
<br>
* * * * *
>[success]# 一些正则表达式里面支持的字符类
>用法:
>SELECT * FROM products WHERE prod_name REGEXP '[[:digit:]]{2}';
>虽然匹配到了1000 但实际匹配的是10 因为00属于本身字符串造成感觉匹配到了1000,注意用[]再次包裹

>[danger] ##### [:alnm:] 任意字母和数字等同[a-zA-Z0-9]
>[danger] ##### [:alpha:] 任意字符[a-zA-Z]
>[danger] ##### [:blank:]空格和制表符等同[\\\t]
>
>[danger] ##### [:cntrl:] ASCII控制制表同ASCII 0-31 和127
>
>[danger] ##### [:lower:] 任意小写[a-z]
>
>[danger] ##### [:upper:] 任意大写[A-Z]
>

