注:使用正则表达式的关键字是REGEXP
1、查询以特定字符或字符串开头的记录
字符“^”匹配特定字符或者字符串开头的文本
#在fruits表中,查询f_name字段以字母b开头的记录
MariaDB [vincen]> select * from fruits
-> where
-> f_name REGEXP '^b'
-> ;
+------+------+------------+---------+
| f_id | s_id | f_name | f_price |
+------+------+------------+---------+
| b1 | 101 | blackberry | 10.20 |
| b2 | 104 | berry | 7.60 |
| t1 | 102 | banana | 10.30 |
+------+------+------------+---------+
3 rows in set (0.01 sec)
2、查询以特定字符或字符串结尾的记录
字符“$”匹配特定字符或者字符串结尾的文本
#在fruits表中,查询f_name字段以y结尾的记录
MariaDB [vincen]> select * from fruits
-> where
-> f_name REGEXP 'y$'
-> ;
+------+------+------------+---------+
| f_id | s_id | f_name | f_price |
+------+------+------------+---------+
| b1 | 101 | blackberry | 10.20 |
| b2 | 104 | berry | 7.60 |
| c0 | 101 | cherry | 3.20 |
| m2 | 105 | xbabay | 2.60 |
+------+------+------------+---------+
4 rows in set (0.00 sec)
3、代替字符中的任意一个字符串
字符“.”匹配任意一个字符
#在fruits表中查询f_name字段值包含字母a与g且两个字母之间只有一个字母的记录
MariaDB [vincen]> select * from fruits
-> where
-> f_name REGEXP 'a.g'
-> ;
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| bs1 | 102 | orange | 11.20 |
| m1 | 106 | mango | 15.60 |
+------+------+--------+---------+
2 rows in set (0.01 sec)
4、匹配多个字符
“*”匹配前面的字符任意多次,包括0次
#在fruits表中查询f_name字段以字母b开头,且b后面出现字母a的记录
MariaDB [vincen]> select * from fruits
-> where
-> f_name REGEXP '^ba*'
-> ;
+------+------+------------+---------+
| f_id | s_id | f_name | f_price |
+------+------+------------+---------+
| b1 | 101 | blackberry | 10.20 |
| b2 | 104 | berry | 7.60 |
| t1 | 102 | banana | 10.30 |
+------+------+------------+---------+
3 rows in set (0.01 sec)
“+”匹配前面的字符至少一次
#在fruits表中查询f_name字段以b开头且b后面出现a至少一次的记录
MariaDB [vincen]> select * from fruits
-> where
-> f_name REGEXP '^ba+'
-> ;
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| t1 | 102 | banana | 10.30 |
+------+------+--------+---------+
1 row in set (0.00 sec)
5、匹配指定字符串
如果要匹配指定单个字符,则直接将该字符写在单引号里就可以了
如果要匹配指定多个字符,则要用“|”符号隔开(在linux 里称为管道符)
#在fruits表中查询字段f_name中带有on字符的记录
MariaDB [vincen]> select * from fruits
-> where
-> f_name REGEXP 'on'
-> ;
+------+------+---------+---------+
| f_id | s_id | f_name | f_price |
+------+------+---------+---------+
| bs2 | 105 | melon | 8.20 |
| l2 | 104 | lemon | 6.40 |
| o2 | 103 | coconut | 9.20 |
+------+------+---------+---------+
3 rows in set (0.00 sec)
#查询fruits表中字段f_name带有on或者ap的记录
MariaDB [vincen]> select * from fruits
-> where
-> f_name REGEXP 'on|ap'
-> ;
+------+------+---------+---------+
| f_id | s_id | f_name | f_price |
+------+------+---------+---------+
| a1 | 101 | apple | 5.20 |
| a2 | 103 | apricot | 2.20 |
| bs2 | 105 | melon | 8.20 |
| l2 | 104 | lemon | 6.40 |
| o2 | 103 | coconut | 9.20 |
| t2 | 102 | grape | 5.30 |
+------+------+---------+---------+
6 rows in set (0.01 sec)
6、匹配指定字符中的任意一个
方括号[]指定一个字符集合、数值集合
#在fruits表中查询字段f_name中包含字母o或者b的记录
MariaDB [vincen]> select * from fruits
-> where
-> f_name REGEXP '[ob]'
-> ;
+------+------+------------+---------+
| f_id | s_id | f_name | f_price |
+------+------+------------+---------+
| a2 | 103 | apricot | 2.20 |
| b1 | 101 | blackberry | 10.20 |
| b2 | 104 | berry | 7.60 |
| bs1 | 102 | orange | 11.20 |
| bs2 | 105 | melon | 8.20 |
| l2 | 104 | lemon | 6.40 |
| m1 | 106 | mango | 15.60 |
| m2 | 105 | xbabay | 2.60 |
| o2 | 103 | coconut | 9.20 |
| t1 | 102 | banana | 10.30 |
| t4 | 107 | xbababa | 3.60 |
+------+------+------------+---------+
11 rows in set (0.01 sec)
#在fruits表中查询s_id字段中带有3或者4或者5或者6的记录
MariaDB [vincen]> select * from fruits
-> where
-> s_id REGEXP '[3456]'
-> ;
+------+------+---------+---------+
| f_id | s_id | f_name | f_price |
+------+------+---------+---------+
| a2 | 103 | apricot | 2.20 |
| b2 | 104 | berry | 7.60 |
| bs2 | 105 | melon | 8.20 |
| l2 | 104 | lemon | 6.40 |
| m1 | 106 | mango | 15.60 |
| m2 | 105 | xbabay | 2.60 |
| m3 | 105 | xxtt | 11.60 |
| o2 | 103 | coconut | 9.20 |
+------+------+---------+---------+
8 rows in set (0.01 sec)
7、匹配指定字符以外的字符
[^字符集合] 匹配不在指定字符集合中的任何字符
#在fruits表中查询f_id字段包含字母a~e和数字1~2以外的字符记录
MariaDB [vincen]> select * from fruits
-> where
-> f_id REGEXP '[^a-e 1-2]'
-> ;
+------+------+---------+---------+
| f_id | s_id | f_name | f_price |
+------+------+---------+---------+
| b5 | 107 | xxxx | 3.60 |
| bs1 | 102 | orange | 11.20 |
| bs2 | 105 | melon | 8.20 |
| c0 | 101 | cherry | 3.20 |
| l2 | 104 | lemon | 6.40 |
| m1 | 106 | mango | 15.60 |
| m2 | 105 | xbabay | 2.60 |
| m3 | 105 | xxtt | 11.60 |
| o2 | 103 | coconut | 9.20 |
| t1 | 102 | banana | 10.30 |
| t2 | 102 | grape | 5.30 |
| t4 | 107 | xbababa | 3.60 |
+------+------+---------+---------+
12 rows in set (0.01 sec)
8、指定字符出现次数
“字符{n,}”表示至少匹配n次前面的字符
#在fruits表中查询f_name字段中字母x至少出现2次的记录
MariaDB [vincen]> select * from fruits
-> where
-> f_name REGEXP 'x{2,}'
-> ;
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| b5 | 107 | xxxx | 3.60 |
| m3 | 105 | xxtt | 11.60 |
+------+------+--------+---------+
2 rows in set (0.01 sec)
“字符{n,m}”表示匹配前面的字符串不少于n次,不多于m次。(n<=次数<=m)
#在fruits表中查询f_name字段里字符串ba出现至少1次,最多3次的记录
MariaDB [vincen]> select * from fruits
-> where
-> f_name REGEXP 'ba{1,3}'
-> ;
+------+------+---------+---------+
| f_id | s_id | f_name | f_price |
+------+------+---------+---------+
| m2 | 105 | xbabay | 2.60 |
| t1 | 102 | banana | 10.30 |
| t4 | 107 | xbababa | 3.60 |
+------+------+---------+---------+
3 rows in set (0.00 sec)