欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql正则表达式(基础使用)

程序员文章站 2022-05-29 15:48:11
...

mysql正则表达式(基础使用)


正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较

正则表达式的基础语法:

select * from products 
where prod_name REGEXP '1000';
查询结果。
+---------+---------+--------------+------------+---------------------------------------+
| prod_id | vend_id | prod_name    | prod_price | prod_desc                             |
+---------+---------+--------------+------------+---------------------------------------+
| JP1000  |    1005 | JetPack 1000 |      35.00 | JetPack 1000, intended for single use |
+---------+---------+--------------+------------+---------------------------------------+

正则表达式和like的区别:

我们来看一个SQL语句:

mysql> select * from products where prod_name REGEXP '1000';
+---------+---------+--------------+------------+---------------------------------------+
| prod_id | vend_id | prod_name    | prod_price | prod_desc                             |
+---------+---------+--------------+------------+---------------------------------------+
| JP1000  |    1005 | JetPack 1000 |      35.00 | JetPack 1000, intended for single use |
+---------+---------+--------------+------------+---------------------------------------+like查询没有通配符则不会匹配任何列值。
 select * from products where prod_name LIKE '1000';
Empty set (0.00 sec)

正则表达式的使用方法:
1、OR匹配:

--形式1 这种写法是错误的。可以写成 prod_name='1' or prod_name='2' or prod_name='3 ton'
select * from products where prod_name REGEXP '1|2|3 ton';
--形式2
select * from products where prod_name REGEXP '[123] ton';

注意:[^123]代表非1\2\3中的任意一个数值与下文中的^[123]以1\2\3开头是两种意思

2、匹配范围:

--匹配范围可以使用'-'来连接。
select * from products where prod_name REGEXP '[0-9] ton';

3、匹配特殊字符:

select * from products where prod_name REGEXP '\\.';

注意:,mysql中特殊字符转义需要用到两个’\\'来转义;MySQL自己解释一个,正则表达式库解释另一个。
空白元字符
元 字 符 说 明
\f 换页
\n 换行
\r 回车
\t 制表
\v 纵向制表

4、匹配字符类型:
字符类
[:alnum:] 任意字母和数字(同[a-zA-Z0-9])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和制表(同[\t])
[:cntrl:] ASCII控制字符(ASCII 0到31和127)
[:digit:] 任意数字(同[0-9])
[:graph:] 与[:print:]相同,但不包括空格
[:lower:] 任意小写字母(同[a-z])
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:] 包括空格在内的任意空白字符(同[\f\n\r\t\v])
[:upper:] 任意大写字母(同[A-Z])
[:xdigit:] 任意十六进制数字(同[a-fA-F0-9])

5、匹配多个实例
重复元字符
元 字 符 说 明
    *     0个或多个匹配
    +    1个或多个匹配(等于{1,})
    ?     0个或1个匹配(等于{0,1})
    {n}        指定数目的匹配
    {n,}      不少于指定数目的匹配
    {n,m}    匹配数目的范围(m不超过255)

这里值得注意的是:

--“?”这个元字符的意思是为?匹配它前面的任何字符的0次或1次出现
select * from products where prod_name regexp '\\([0-9] sticks?\\)';

6、定位符:
      定位元字符
    元 字 符 说 明
 ^    文本的开始
 $    文本的结尾
 [[:<:]]    词的开始
 [[:>:]]    词的结尾

 select * from products where prod_name regexp '^[:digit:\\.]';