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 从零开始学》笔记记录。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《精通正则表达式(第3版)》讲解正则表达式,这种工具能够提高工作效率、让生活变得更轻松。精心调校后的正则表达式只需要十多秒就能完成以前数小时才能完成的枯燥任务。如今,正则表达式已经成为众多语言及工具——Perl、PHP、Java、Python、Ruby、MysQL、VB-NET和c#(以及.NETFramework中的任何语言)——中的标准特性,依靠它,你能以之前完全不敢设想的方式进行复杂而精巧的文本处理。十年三版,再显王者风范,近30年开发经验的智慧结晶,深入理解正则表达式,彻底修炼基本功,全球第一本全面深入讲解正则表达式的经典巨著,《程序员》杂志技术主编孟岩鼎力推荐。 专家点评:《精通正则表达式》是系统学习正则表达式的唯一最权威著作。任何时候,任何地方,只要提到正则表达式著作,人们都会提到这本书。该书质量之高,声誉之盛,使得几乎没有人企图挑战它的地位,从而在正则表达式图书领域形成了独特的“一夫当关”的局面,称其为正则表达式圣经,绝对当之无愧。 ——《程序员》杂志技术主编孟岩 《精通正则表达式(第3版)》包含了对PHP及其正则表达式的讲解。这一版的更新也反映了其他语言的发展,深入讲解了Sun的java.util.regex,并特别提到了Java1.4.2和Java1.5/1.6之间的众多差异。 本书的内容: ·各种语言和工具的功能比较 ·正则引擎的工作原理 ·优化(能节省大量的时间) ·准确匹配期望的文本 ·针对具体语言的章节 《精通正则表达式(第3版)》,以明晰轻松的笔调向程序员深入浅出地讲解复杂的知识,并给出了现实世界中复杂问题的解决办法,读者能够立刻运用书中丰富的知识,巧妙而高效地解决各种问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值