正则表达式: 用来匹配文本的特殊的字符集合。
注意:
1、正则表达式比较复杂,前面灵活使用基本够用
2、所有种类的程序设计语言,文本编辑器、操作系统等都支持正则表达式
3、正则表达式使用正则表达式语言建立的,所以想要使用的顺滑,就要学会他的特殊语法和指令
简单使用,正则表达式语言的一个子集,MySQL 正则表达式
1、初相识
-- 检索商品名中含有 ton 的商品
![da44c3ccdaf02996c2370653f5685102.png](https://i-blog.csdnimg.cn/blog_migrate/42e9e9272edf74acdb72dbfcacc7cfbf.png)
注意: like 与regexp 的区别:就是 like 匹配整个列值,要的是整体。regexp 匹配这个列值中的有没含有,属于他的一部分就行
1、like 匹配整个列,如果匹配的文本正在列值中出现,like 将不会找到他,相应的行也不会被返回(除非与通配符连用)
2、regexp 在列值内进行匹配,如果被匹配的文本在列值中出现,regexp 就会找到他,将相应的行返回。
2、区分大小写匹配
MySQL 默认是不区分大小写的,要区分的话可以使用 binary 关键字区分大小写
-- 查看商品名中含有T的商品
![7a59b99d917a15ffc4229bc68b8606cb.png](https://i-blog.csdnimg.cn/blog_migrate/f30b076f223fb33aafa892d6d027de68.jpeg)
3、进行或 (|)匹配,像之前的OR 一样,满足其中之一就行
-- 检索商品名中含有ton 或1000 的商品
![b51cf380af92c4e6a6c225ac95f233b1.png](https://i-blog.csdnimg.cn/blog_migrate/70e2b909055b19b66bc0fc8ccfaaf875.png)
注意: | 为正则表达式的或操作符,表示满足其中之一就会匹配返回,使用方式与or 基本一致,两个后多个条件多个|
4、匹配特定字符
-- 查找商品名中含有的 五个字符中,第一个字符是12的商品
![a6e09b4c4aea868a6a5e652e8180cf9f.png](https://i-blog.csdnimg.cn/blog_migrate/6415d41661d112ef2b4fe5e942a38cb3.png)
因此,[ ] 是 or 语句的另一种形式,[12] 相当于[1|2] , 但是要用中括号包裹起来,表示 1或2 开头的某某
与 1|2 ton 还是有区别的
-- 查找商品名称含有 1 或 2 ton 的商品
![9edae87e0df1cce34182f4271a5d2b8a.png](https://i-blog.csdnimg.cn/blog_migrate/fbdffd07771365bb4d4314899e47d7b5.jpeg)
可以查找指定之外的 [^12]
![fbd74df4a2f887acf2c1e08f1df0260e.png](https://i-blog.csdnimg.cn/blog_migrate/9339fda3496e0e03428ed72ef20ec1da.jpeg)
5、匹配范围
集合用来定义要匹配的一个或多个字符,如 [0123456789] 可以简化为 [0-9] ,其中 - 表示从0到9 的一个范围
-- 查找商品名中含有的 五个字符中,第一个字符是0到9之间 的商品
![5e5315471fcfaddd85f8ec9b5990abc0.png](https://i-blog.csdnimg.cn/blog_migrate/c353af49a635967aea6a8ec5f925b820.jpeg)
6、匹配特殊字符
之前已经了解的三个特殊符号
表示匹配所有的(.)
表示或的(|)
表示范围的(-)
那么要查询商品名中含有那些与特殊钢符号冲突的怎么办,
使用 . 进行转义(escaping)
-- 查找商品名中含有 . 的商品
![64b49b17f53e9e7c174382b8d1f68b52.png](https://i-blog.csdnimg.cn/blog_migrate/38d9f1b968e66c18dfcebfe87bbd2abc.jpeg)
两个反斜杠也可以用来引用元字符(具有特殊含义的字符)
![509d8eec9b6621e139bc120f3f9e69a9.png](https://i-blog.csdnimg.cn/blog_migrate/7af391fa618ff914910e84d756562277.png)
注意:
1、要匹配反斜杠() 需要使用
2、多数正则表达是需要使用单个反斜杠,才能使用字符本身,但是Mysql 要求两个(Mysql 解释一个,正则表达式库解释一个)
7、字符类
字符类(character class): 使用预定义的字符集,找出常用的数字,所有字母字符或数字字符
![4b134679b60f621cd1a357e9b5662dbb.png](https://i-blog.csdnimg.cn/blog_migrate/bcd9bf29343fc66e98751a8e66c9378d.jpeg)
-- 检索商品名中含有 任意数字的商品
![18b8bbb30fc59050190afe04064ab609.png](https://i-blog.csdnimg.cn/blog_migrate/346dcb019a442cf9528d6d3c3a0321fd.jpeg)
8、匹配多个实例
检索多个实例,
-- 匹配商品名中含有 ([0-9] sticks) 或 ([0-9] stick) 的商品,
![20cc4c7552ab1ac95091da8903d8a4bc.png](https://i-blog.csdnimg.cn/blog_migrate/3b3c97f598b4e2304644ed35420172ae.png)
重复元字符
![42355e2f246a6c004ce8c893a27152c1.png](https://i-blog.csdnimg.cn/blog_migrate/93018abae01806118f357e7ad7a5d385.jpeg)
字符类和重复元字符连用
-- 检索商品名中有四个数字连在一起的商品
![3c937fd186f5975347effa841d55178a.png](https://i-blog.csdnimg.cn/blog_migrate/9ef2471f52be228855f061ef32f35c7f.jpeg)
9、定位符
匹配特定位置的文本
![e8253caed05432b2e94e7593478eec98.png](https://i-blog.csdnimg.cn/blog_migrate/36a04416986d6a8d87302ed4a722f266.png)
-- 检索商品名中以任意一个数(包括小数点)开始的产品
![901df1e4aadf286cf0205650127fe0b0.png](https://i-blog.csdnimg.cn/blog_migrate/d6acdd42092536bccbf81ba981224eca.jpeg)
注意:
1、^ 有两个作用,一是在集合中用来否定集合,二是指字符串的开始处
2、利用定位符,以^ 开始和以$ 结束的每个表达式,可以匹配整个字符串,起到和 like 一样的作用
简单的正则表达式测试:
在不使用数据库表的情况下用select 来测试正则表达式,regexp 检查总是返回0(没有匹配)或1(匹配)
![9a9ce021c8a7ac82772d340b93ff10f8.png](https://i-blog.csdnimg.cn/blog_migrate/047f443a0d49d57a2246f6181933fded.png)