1、REGEXP ‘匹配方式’
2、常用匹配方式
模式字符 |
含义 |
^ |
匹配字符开始的部分 |
$ |
匹配字符串结尾的部分 |
. |
代表字符串中的任意一个字符,包括回车换行 |
[字符合集] |
匹配字符合集中的任何一个字符 |
[^字符合集] |
匹配除了字符合集以外的任何一个字符 |
S1 | S2 | S3 |
匹配S1、S2、S3中的任意一个字符串 |
* |
代表0个1个或多个其前的字符 |
+ |
代表1个或多个其前的字符 |
String{N} |
字符串出现N次 |
字符串{M,N} |
字符串至少出现M次,最多N次 |
1、^匹配字符开始的部分
以用户表为例,匹配用户名以t开始的用户:
1 2 3 4 5 6 7 8
| mysql> SELECT * FROM cms_user WHERE username REGEXP '^t'; + | id | username | password | email | regTime | face | proId | age | sex | + | 12 | test1 | test1 | user@qq.com | 1419811708 | user.jpg | 1 | NULL | 保密 | | 13 | TEST2 | TEST2 | user@qq.com | 1381203974 | user.jpg | 20 | 18 | NULL | + 2 rows in set (0.00 sec)
|
2、$匹配字符结尾的部分
以用户表为例,匹配用户名以g结尾的用户:
1 2 3 4 5 6 7 8 9
| mysql> SELECT * FROM cms_user WHERE username REGEXP 'g$'; + | id | username | password | email | regTime | face | proId | age | sex | + | 4 | long | long | user@qq.com | 1419814708 | user.jpg | 4 | 44 | 女 | | 5 | ring | ring | user@qq.com | 1419815708 | user.jpg | 2 | 25 | 男 | | 7 | sing | sing | user@qq.com | 1419817708 | user.jpg | 5 | 56 | 男 | + 3 rows in set (0.00 sec)
|
3、.代表任意字符
比如查询用户名中出现rg且中间有两个任意字符:
1 2 3 4 5 6 7
| mysql> SELECT * FROM cms_user WHERE username REGEXP 'r..g'; + | id | username | password | email | regTime | face | proId | age | sex | + | 5 | ring | ring | user@qq.com | 1419815708 | user.jpg | 2 | 25 | 男 | + 1 row in set (0.00 sec)
|
该命令等价于:
1
| SELECT * FROM cms_user WHERE username LIKE 'r__g';
|
4、[字符合集],匹配字符合集中的任何一个字符
例如匹配用户名中包含[lt]的的用户:
1 2 3 4 5 6 7 8 9 10 11
| mysql> SELECT * FROM cms_user WHERE username REGEXP '[lt]'; + | id | username | password | email | regTime | face | proId | age | sex | + | 4 | long | long | user@qq.com | 1419814708 | user.jpg | 4 | 44 | 女 | | 8 | blek | blek | user@qq.com | 1419818708 | user.jpg | 1 | 88 | 女 | | 10 | lily | lily | user@qq.com | 1419831708 | user.jpg | 2 | 32 | 女 | | 12 | test1 | test1 | user@qq.com | 1419811708 | user.jpg | 1 | NULL | 保密 | | 13 | TEST2 | TEST2 | user@qq.com | 1381203974 | user.jpg | 20 | 18 | NULL | + 5 rows in set (0.00 sec)
|
也可以指定集合,比如出现过a-f的:
1 2 3 4 5 6 7 8 9 10 11
| mysql> SELECT * FROM cms_user WHERE username REGEXP '[a-f]'; + | id | username | password | email | regTime | face | proId | age | sex | + | 6 | queen | queen | user@qq.com | 1419861708 | user.jpg | 3 | 77 | 女 | | 8 | blek | blek | user@qq.com | 1419818708 | user.jpg | 1 | 88 | 女 | | 9 | rose | rose | user@qq.com | 1419821708 | user.jpg | 2 | 12 | 男 | | 12 | test1 | test1 | user@qq.com | 1419811708 | user.jpg | 1 | NULL | 保密 | | 13 | TEST2 | TEST2 | user@qq.com | 1381203974 | user.jpg | 20 | 18 | NULL | + 5 rows in set (0.01 sec)
|
5、[^字符合集],匹配除了字符合集以外的任何一个字符
例如匹配用户名中除了[long]的的用户(如果用户名叫longe也会显示出来):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| mysql> SELECT * FROM cms_user WHERE username REGEXP '[^long]'; + | id | username | password | email | regTime | face | proId | age | sex | + | 1 | 张三 | zhangsan | user@qq.com | 1419811708 | user.jpg | 1 | 11 | 男 | | 2 | 张三丰 | zhangsanfeng | user@qq.com | 1419812708 | user.jpg | 2 | 21 | 女 | | 3 | 章子怡 | zhangsan | user@qq.com | 1419813708 | user.jpg | 3 | 33 | 男 | | 5 | ring | ring | user@qq.com | 1419815708 | user.jpg | 2 | 25 | 男 | | 6 | queen | queen | user@qq.com | 1419861708 | user.jpg | 3 | 77 | 女 | | 7 | sing | sing | user@qq.com | 1419817708 | user.jpg | 5 | 56 | 男 | | 8 | blek | blek | user@qq.com | 1419818708 | user.jpg | 1 | 88 | 女 | | 9 | rose | rose | user@qq.com | 1419821708 | user.jpg | 2 | 12 | 男 | | 10 | lily | lily | user@qq.com | 1419831708 | user.jpg | 2 | 32 | 女 | | 11 | john | john | user@qq.com | 1419841708 | user.jpg | 2 | 65 | 保密 | | 12 | test1 | test1 | user@qq.com | 1419811708 | user.jpg | 1 | NULL | 保密 | | 13 | TEST2 | TEST2 | user@qq.com | 1381203974 | user.jpg | 20 | 18 | NULL | + 12 rows in set (0.01 sec)
|
同理也可以指定集合不在a-k的:
1
| SELECT * FROM cms_user WHERE username REGEXP '[^a-k]';
|
6、S1 | S2 | S3,匹配S1、S2、S3中的任意一个字符串
例如匹配ng|qu的:
1 2 3 4 5 6 7 8 9 10
| mysql> SELECT * FROM cms_user WHERE username REGEXP 'ng|qu'; + | id | username | password | email | regTime | face | proId | age | sex | + | 4 | long | long | user@qq.com | 1419814708 | user.jpg | 4 | 44 | 女 | | 5 | ring | ring | user@qq.com | 1419815708 | user.jpg | 2 | 25 | 男 | | 6 | queen | queen | user@qq.com | 1419861708 | user.jpg | 3 | 77 | 女 | | 7 | sing | sing | user@qq.com | 1419817708 | user.jpg | 5 | 56 | 男 | + 4 rows in set (0.00 sec)
|
7、*,代表0个1个或多个其前的字符
比例出现qu的:
1 2 3 4 5 6 7
| mysql> SELECT * FROM cms_user WHERE username REGEXP 'qu*'; + | id | username | password | email | regTime | face | proId | age | sex | + | 6 | queen | queen | user@qq.com | 1419861708 | user.jpg | 3 | 77 | 女 | + 1 row in set (0.00 sec)
|
8、+,代表1个或多个其前的字符
比如t+一定出现t:
1 2 3 4 5 6 7 8
| mysql> SELECT * FROM cms_user WHERE username REGEXP 't+'; + | id | username | password | email | regTime | face | proId | age | sex | + | 12 | test1 | test1 | user@qq.com | 1419811708 | user.jpg | 1 | NULL | 保密 | | 13 | TEST2 | TEST2 | user@qq.com | 1381203974 | user.jpg | 20 | 18 | NULL | + 2 rows in set (0.00 sec)
|
9、String{N},字符串出现N次
比如que出现2次:
1 2 3 4 5 6 7
| mysql> SELECT * FROM cms_user WHERE username REGEXP 'que{2}'; + | id | username | password | email | regTime | face | proId | age | sex | + | 6 | queen | queen | user@qq.com | 1419861708 | user.jpg | 3 | 77 | 女 | + 1 row in set (0.00 sec)
|
10、字符串{M,N},字符串至少出现M次,最多N次
比如que最多出现3次最少出现一次:
1 2 3 4 5 6 7
| mysql> SELECT * FROM cms_user WHERE username REGEXP 'que{1,3}'; + | id | username | password | email | regTime | face | proId | age | sex | + | 6 | queen | queen | user@qq.com | 1419861708 | user.jpg | 3 | 77 | 女 | + 1 row in set (0.00 sec)
|