MySQL知识(十一)——使用正则表达式查询

使用正则表达式查询

  MySQL中使用REGEXP关键字指定正则表达式的字符匹配模式。

选项说明例子匹配值示例
匹配文本开始字符‘^b’匹配以字母b开头的字符串book,big
$匹配文本结束字符‘st$’匹配以st结尾的字符串test,persist
.匹配任何单个字符‘b.t’匹配任何b和t之间有一个字符bit,bat,but
*匹配零个或多个在它前面的字符‘f*n’匹配字符n前面有任意个字符fn,fan,faan
+匹配前面的字符1次或多次‘ba+’匹配以b开头后面紧跟至少一个aba,bay,bare
<字符串>匹配包含指定的字符串文本‘fa’fan,afa,faad
[字符集合]匹配字符集合中的任何一个字符‘[xz]’匹配x或者zdizzy,zebra,x-ray
[^]匹配不在括号中的任何字符‘[^abc]’匹配任何不包含a,b,c的字符串desk,fox,f8ke
字符串{n,}匹配前面的字符串至少n次b{2}匹配2个或更多的bbbb,bbb,bbbbbb
字符串{n,m}匹配前面的字符串至少n次,至多m次。如果n为0,此参数为可选参数b{2,4}匹配最少2个,最多4个bbb,bbb,bbbb

1 查询以特定字符或字符串开头的记录

  ‘^’匹配以特定字符或字符串开头的文本。

mysql> SELECT * FROM fruits WHERE f_name REGEXP '^x';
+------+------+---------+---------+
| f_id | s_id | f_name  | f_price |
+------+------+---------+---------+
| b5   |  107 | xxxx    | 3.6     |
| m2   |  105 | xbabay  | 2.6     |
| m3   |  105 | xxtt    | 11.6    |
| t4   |  107 | xbababa | 3.6     |
+------+------+---------+---------+
4 rows in set

2 查询以特定字符或字符串结尾的记录

  ‘$’匹配以特定字符或字符串结尾的文本。

mysql> SELECT * FROM fruits WHERE f_name REGEXP 'rry$';
+------+------+------------+---------+
| f_id | s_id | f_name     | f_price |
+------+------+------------+---------+
| b1   |  101 | blackberry | 10.2    |
| b2   |  104 | berry      | 7.6     |
| c0   |  101 | cherry     | 3.2     |
+------+------+------------+---------+
3 rows in set

3 用符号”.”来替代字符串中的任意一个字符

  ‘.’匹配任意一个字符

mysql> SELECT * FROM fruits WHERE f_name REGEXP 'a.g';
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| bs1  |  102 | orange | 11.2    |
| m1   |  106 | mango  | 15.6    |
+------+------+--------+---------+
2 rows in set

4 使用”*”和”+”来匹配多个字符

  星号’*’匹配前面的字符任意多次,包括0次;加号’+’匹配前面的字符至少一次。

mysql> SELECT * FROM fruits WHERE f_name REGEXP '^ba*';
+------+------+------------+---------+
| f_id | s_id | f_name     | f_price |
+------+------+------------+---------+
| b1   |  101 | blackberry | 10.2    |
| b2   |  104 | berry      | 7.6     |
| t1   |  102 | banana     | 10.3    |
+------+------+------------+---------+
3 rows in set

mysql> SELECT * FROM fruits WHERE f_name REGEXP '^ba+';
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| t1   |  102 | banana | 10.3    |
+------+------+--------+---------+
1 row in set

5 匹配指定字符串

  正则表达式可以匹配指定字符串,只要这个字符串在查询文本中即可,如果要匹配多个字符串,多个字符串之间使用分隔符’|’隔开:

mysql> SELECT * FROM fruits WHERE f_name REGEXP 'on';
+------+------+---------+---------+
| f_id | s_id | f_name  | f_price |
+------+------+---------+---------+
| bs2  |  105 | melon   | 8.2     |
| l2   |  104 | lemon   | 6.4     |
| o2   |  103 | coconut | 9.2     |
+------+------+---------+---------+
3 rows in set

mysql> SELECT * FROM fruits WHERE f_name REGEXP 'on|ap';
+------+------+---------+---------+
| f_id | s_id | f_name  | f_price |
+------+------+---------+---------+
| a1   |  101 | apple   | 5.2     |
| a2   |  103 | apricot | 2.2     |
| bs2  |  105 | melon   | 8.2     |
| l2   |  104 | lemon   | 6.4     |
| o2   |  103 | coconut | 9.2     |
| t2   |  102 | grape   | 5.3     |
+------+------+---------+---------+
6 rows in set

  与REGEXP不同,LIKE匹配的字符串如果在文本中间出现,则找不到它,相应的行业不会返回。

mysql> SELECT * FROM fruits WHERE f_name LIKE 'on';
Empty set

6 匹配指定字符中的任意一个

  方括号”[]”指定一个字符集合,只匹配其中任何一个字符,即为所查找的文本。还可以指定数值集合。”[a-z]”表示集合区间为从a~z的字母,”[0-9]”表示集合区间为所有数字。

mysql> SELECT * FROM fruits WHERE f_name REGEXP '[ot]';
+------+------+---------+---------+
| f_id | s_id | f_name  | f_price |
+------+------+---------+---------+
| a2   |  103 | apricot | 2.2     |
| bs1  |  102 | orange  | 11.2    |
| bs2  |  105 | melon   | 8.2     |
| l2   |  104 | lemon   | 6.4     |
| m1   |  106 | mango   | 15.6    |
| m3   |  105 | xxtt    | 11.6    |
| o2   |  103 | coconut | 9.2     |
+------+------+---------+---------+
7 rows in set

7 匹配指定字符以外的字符

  “[^字符集合]”匹配不在指定集合中的任何字符。
  例,查询f_id字段包含字母a~e和数字1~2以外的字符的记录:

mysql> SELECT * FROM fruits WHERE f_id REGEXP '[^a-e1-2]';
+------+------+---------+---------+
| f_id | s_id | f_name  | f_price |
+------+------+---------+---------+
| b5   |  107 | xxxx    | 3.6     |
| bs1  |  102 | orange  | 11.2    |
| bs2  |  105 | melon   | 8.2     |
| c0   |  101 | cherry  | 3.2     |
| l2   |  104 | lemon   | 6.4     |
| m1   |  106 | mango   | 15.6    |
| m2   |  105 | xbabay  | 2.6     |
| m3   |  105 | xxtt    | 11.6    |
| o2   |  103 | coconut | 9.2     |
| t1   |  102 | banana  | 10.3    |
| t2   |  102 | grape   | 5.3     |
| t4   |  107 | xbababa | 3.6     |
+------+------+---------+---------+
12 rows in set

8 使用{n,}或者{n,m}来指定字符串连续出现的次数

  字符串{n,}:匹配前面的字符串至少n次;
  字符串{n,m}:匹配前面的字符串至少n次,至多m次。如果n为0,此参数为可选参数。

mysql> SELECT * FROM fruits WHERE f_name REGEXP 'x{2,}';
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| b5   |  107 | xxxx   | 3.6     |
| m3   |  105 | xxtt   | 11.6    |
+------+------+--------+---------+
2 rows in set

mysql> SELECT * FROM fruits WHERE f_name REGEXP 'ba{1,3}';
+------+------+---------+---------+
| f_id | s_id | f_name  | f_price |
+------+------+---------+---------+
| m2   |  105 | xbabay  | 2.6     |
| t1   |  102 | banana  | 10.3    |
| t4   |  107 | xbababa | 3.6     |
+------+------+---------+---------+
3 rows in set

说明

  阅读《MySQL5.5 从零开始学》笔记记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值