🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[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';` **图片信息**: ![](https://box.kancloud.cn/66105b0e439e50deac63773c36729cda_691x72.png) **注**: 查询prod_name字段中包含100 的内容,如果条件换成10,1000等都会查出这条信息,因为都是包含关系 <br> >[danger] ##### 或文本匹配-| `SELECT * FROM products WHERE prod_name REGEXP '1000|2000';` **图片信息**: ![](https://box.kancloud.cn/d162cf2a3a06dde7dc8d8e124679f2de_676x90.png) **注**: 当使用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';` **图片信息**: ![](https://box.kancloud.cn/be7d2a762ab04d0dd1f922e936db8ad5_717x68.png) **注**: 正则表达式[123] Ton ,[123]定义一组字符,它的意思是匹配 1 或 2 或 3, 因此,1 ton 和 2 ton 都匹配并且返回。 <br> >[danger] ##### 不匹配文字中任意一个-[^] `SELECT * FROM products WHERE prod_name REGEXP '[^123] Ton';` **图片信息**: ![](https://box.kancloud.cn/a471f0b7ae62c88c503f1f767a93789a_702x64.png) **注**: 和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';` **图片信息**: ![](https://box.kancloud.cn/3bb2c052d89230d765652898950306ff_699x84.png) **注**: 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 '.';` **图片信息**: ![](https://box.kancloud.cn/bfbf3902ad49dd3e79d949fed683b94a_694x141.png) **注**: 1. 小数点表示匹配所有 2. 如果想匹配小数点用转移符号//. <br> * * * * * >[success]# 一些正则表达式里面支持的字符类 >用法: >SELECT * FROM products WHERE prod_name REGEXP '[[:digit:]]{2}'; >虽然匹配到了1000 但实际匹配的是10 因为00属于本身字符串造成感觉匹配到了1000,注意用[]再次包裹 ![](https://box.kancloud.cn/bcfb7e2899d4f8e57e680e4776544bae_690x63.png) >[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] > ![](https://box.kancloud.cn/0868fc8ee4d04f99d6108ea5a9ff420a_872x483.png) ![](https://box.kancloud.cn/012b778051fd4d537280fa75be7f3310_783x515.png)