您好,UncleToo欢迎您!  为了更好的浏览本站,请使用高版本浏览器
RSS  Tag     设为首页 | 加入收藏
 您所在的位置:首页 > 数据库技术 > MySQL

MySQL教程:使用正则表达式查询

作者:未知  来源:转载  日期:2016-02-25 22:02:25
收藏  评论:( 0 )  阅读:357

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



除非特别声明,本站所有PHP教程及其他教程/文章均为原创、翻译或网友投稿,版权均归UncleToo中文网所有, 转载请注明作者及出处。
原文网址:http://www.uncletoo.com/html/mysql/1179.html
读完这篇文章后,你是否有所收获? 分享是一种生活的信念!
  • 0
  • 0
我来说两句
更多>>网友评论