目录
引言
正则表达式是用来匹配文本的特殊的串(字符集合)。如果你想从一个文本文件中提取电话号码,可以使用正则表达式。如果你需要查找名字中间有数字的所有文件,可以使用一个正则表达式。如果你想在一个文本块中找到所有重复的单词,可以使用一个正则表达式。所有种类的程序设计语言、文本编辑器、操作系统等都支持正则表达式。
一、正则表达式
MySQL 的正则表达式使用 REGEXP 这个关键字来指定正则表达式的匹配模式,REGEXP 操作符所支持的匹配模式如下所示
匹配 | 描述 | 示例 |
---|---|---|
^ | 匹配文本的开始字符 | ‘^bd’ 匹配以 bd 开头的字符串 |
$ | 匹配文本的结束字符 | ‘qn$’ 匹配以 qn 结尾的字符串 |
. | 匹配任何单个字符 | ‘s.t’ 匹配任何 s 和 t 之间有一个字符的字符串 |
* | 匹配零个或多个在它前面的字符 | ‘fo*t’ 匹配 t 前面有任意个 o |
% | 匹配所有 | \ |
+ | 匹配前面的字符 1 次或多次 | ‘hom+’ 匹配以 ho 开头,后面至少一个m 的字符串 |
字符串 | 匹配包含指定的字符串 | ‘clo’ 匹配含有 clo 的字符串 |
p1Ip2 | 匹配 p1 或 p2 | \ |
[…] | 匹配字符集合中的任意一个字符 | ‘[abc]’ 匹配 a 或者 b 或者 c |
[^…] | 匹配不在括号中的任何字符 | ‘[^ab]’ 匹配不包含 a 或者 b 的字符串 |
{n} | 匹配前面的字符串 n 次 | ‘g{2}’ 匹配含有 2 个 g 的字符串 |
{n,m} | 匹配前面的字符串至少 n 次,至多m 次 | ‘f{1,3}’ 匹配 f 最少 1 次,最多 3 次 |
- 案例
#查询以li开头的学生信息
mysql> select id,name from info where name regexp '^li';
+----+-------+
| id | name |
+----+-------+
| 2 | lier |
| 3 | lisan |
| 7 | lilei |
+----+-------+
3 rows in set (0.01 sec)
-----------------------------------------------------------------------------------------------
#查询以n结尾的学生信息
mysql> select id,name from info where name regexp 'n$';
+----+--------+
| id | name |
+----+--------+
| 3 | lisan |
| 5 | goudan |
| 10 | shidan |
+----+--------+
3 rows in set (0.00 sec)
-----------------------------------------------------------------------------------------------
#查询名字中包含an的学生信息
mysql> select id,name from info where name regexp 'n$';
+----+--------+
| id | name |
+----+--------+
| 3 | lisan |
| 5 | goudan |
| 10 | shidan |
+----+--------+
3 rows in set (0.00 sec)
----------------------------------------------------------------------------------------------
#查询名字是wang开头,a结尾,中间不知道是一个什么字符的学生信息
mysql> select id,name from info where name regexp 'wang.a';
+----+--------+
| id | name |
+----+--------+
| 4 | wangya |
+----+--------+
1 row in set (0.00 sec)
---------------------------------------------------------------------------------------------
#查询名字中包含sh或者li的学生信息
mysql> select id,name from info where name regexp 'sh|li';
+----+--------+
| id | name |
+----+--------+
| 2 | lier |
| 3 | lisan |
| 7 | lilei |
| 9 | shabi |
| 10 | shidan |
+----+--------+
5 rows in set (0.00 sec)
----------------------------------------------------------------------------------------------
#查询名字中有sh,a可有可无的学生信息,必须要有的部分是'sh' 而'a'可有可无
mysql> select id,name from info where name regexp 'sha*';
+----+--------+
| id | name |
+----+--------+
| 9 | shabi |
| 10 | shidan |
+----+--------+
2 rows in set (0.00 sec)
----------------------------------------------------------------------------------------------
#查询名字中含有go,u至少出现一次的信息
mysql> select id,name from info where name regexp 'gou+';
+----+--------+
| id | name |
+----+--------+
| 5 | goudan |
| 11 | goush |
+----+--------+
2 rows in set (0.00 sec)
------------------------------------------------------------------------------------------------
#查询名字以s-x开头的学生信息
mysql> select id,name from info where name regexp '^[s-x]';
+----+--------+
| id | name |
+----+--------+
| 4 | wangya |
| 9 | shabi |
| 10 | shidan |
+----+--------+
3 rows in set (0.00 sec)
--------------------------------------------------------------------------