正则表达式查询
查询特定字符或字符串开头的记录
字符‘^’匹配以特定字符或字符串开头的文本
1.查询以x开头的记录
mysql> SELECT *
-> FROM fruits
-> WHERE f_name REGEXP '^x';
+------+------+---------+---------+
| f_id | s_id | f_name | f_price |
+------+------+---------+---------+
| b5 | 107 | xxxx | 3.60 |
| m2 | 105 | xbabay | 2.60 |
| t4 | 107 | xbababa | 3.60 |
+------+------+---------+---------+
3 rows in set (0.00 sec)
2查询以xx开头的记录
mysql> SELECT *
-> FROM fruits
-> WHERE f_name REGEXP '^xx';
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| b5 | 107 | xxxx | 3.60 |
+------+------+--------+---------+
1 row in set (0.00 sec)
查询特定字符或字符串结尾的记录
字符$匹配以特定字符或字符串结尾的文本
1.查询以e结尾的记录
mysql> SELECT *
-> FROM fruits
-> WHERE f_name REGEXP 'e$';
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| a1 | 101 | apple | 5.20 |
| bs1 | 102 | orange | 11.20 |
| t2 | 102 | grape | 5.30 |
+------+------+--------+---------+
3 rows in set (0.00 sec)
2.查询以go结尾的记录
mysql> SELECT *
-> FROM fruits
-> WHERE f_name REGEXP 'go$';
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| m1 | 106 | mngo | 15.70 |
+------+------+--------+---------+
1 row in set (0.00 sec)
用符号.来代替字符串中任一字符
字符.匹配任意一个字符
1.查询包含r某y的记录
mysql> SELECT *
-> FROM fruits
-> WHERE f_name REGEXP 'r.y';
+------+------+------------+---------+
| f_id | s_id | f_name | f_price |
+------+------+------------+---------+
| b1 | 101 | blackberry | 10.20 |
| b2 | 104 | berry | 7.60 |
| c0 | 101 | cherry | 3.20 |
+------+------+------------+---------+
3 rows in set (0.00 sec)
用符号“*”和“+”来匹配多个字符
“*”可匹配前面多个字符,“+”至少匹配前面字符一次
mysql> SELECT *
-> FROM fruits
-> WHERE f_name REGEXP '^mn*';
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| bs2 | 105 | melon | 8.20 |
| m1 | 106 | mngo | 15.70 |
+------+------+--------+---------+
2 rows in set (0.00 sec)
mysql> SELECT *
-> FROM fruits
-> WHERE f_name REGEXP '^mn+';
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| m1 | 106 | mngo | 15.70 |
+------+------+--------+---------+
1 row in set (0.00 sec)
匹配指定字符串
正则表达式可以匹配指定的字符串,只要这个字符串在查询文本中即可,如果要匹配多个字符串,多个字符串之间使用分隔符"|"隔开
1.查询包含字符串“ge”的记录
mysql> SELECT *
-> FROM fruits
-> WHERE f_name REGEXP 'ge';
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| bs1 | 102 | orange | 11.20 |
+------+------+--------+---------+
1 row in set (0.00 sec)
2.查询包含“ge”或者"na"的记录
mysql> SELECT *
-> FROM fruits
-> WHERE f_name REGEXP 'ge|na';
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| bs1 | 102 | orange | 11.20 |
| t1 | 102 | banana | 10.30 |
+------+------+--------+---------+
2 rows in set (0.00 sec)
匹配指定字符中的任意一个
方括号“[]”指定一个字符集合,只匹配其中任何一个字符。
1.查询包含字母“a”或者"e"的记录
mysql> SELECT *
-> FROM fruits
-> WHERE f_name REGEXP '[ae]';
+------+------+------------+---------+
| f_id | s_id | f_name | f_price |
+------+------+------------+---------+
| a1 | 101 | apple | 5.20 |
| 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 |
| c0 | 101 | cherry | 3.20 |
| m2 | 105 | xbabay | 2.60 |
| t1 | 102 | banana | 10.30 |
| t2 | 102 | grape | 5.30 |
| t4 | 107 | xbababa | 3.60 |
+------+------+------------+---------+
11 rows in set (0.00 sec)
使用{n,}或者{n,m}来指定字符串出现的次数
查询至少连续出现2次r的记录
mysql> SELECT *
-> FROM fruits
-> WHERE f_name REGEXP 'r{2,}';
+------+------+------------+---------+
| f_id | s_id | f_name | f_price |
+------+------+------------+---------+
| b1 | 101 | blackberry | 10.20 |
| b2 | 104 | berry | 7.60 |
| c0 | 101 | cherry | 3.20 |
+------+------+------------+---------+
3 rows in set (0.00 sec)
匹配指定字符以外的字符
“[^字符集合]”匹配不在指定集合中的任何字符
匹配非101-104的记录
mysql> SELECT *
-> FROM fruits
-> WHERE s_id REGEXP '[^101-104]';
+------+------+---------+---------+
| f_id | s_id | f_name | f_price |
+------+------+---------+---------+
| a2 | 103 | apricot | 2.20 |
| b5 | 107 | xxxx | 3.60 |
| bs1 | 102 | orange | 11.20 |
| bs2 | 105 | melon | 8.20 |
| m1 | 106 | mngo | 15.70 |
| m2 | 105 | xbabay | 2.60 |
| t1 | 102 | banana | 10.30 |
| t2 | 102 | grape | 5.30 |
| t4 | 107 | xbababa | 3.60 |
+------+------+---------+---------+
9 rows in set (0.00 sec)