mysql正则表达式(基础使用)
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:\\.]';
上一篇: SQL求众数、中值(Having)
下一篇: 数据库用户管理