您当前的位置: 站长圈 > 技术文章 > 数据库技术 > MySQL数据库——使用正则表达式查询

MySQL数据库——使用正则表达式查询

来源:站长圈 作者:adminzzq 点击: 0
MySQL中使用REGEXP关键字指定正则表达式的字符匹配模式,REGEXP操作符中常用字符匹配列表如下:
选项 说明 例子 匹配值示例
^ 匹配文本的开始字符 ‘^b’匹配以字母b开头的字符串 book,big,banana,bike
$ 匹配文本的结束字符 ‘st$’匹配以st结尾的字符串 test,resist,persist
  匹配任何单个字符 ‘b.t’匹配任何b和t之间有一个字符 bit,bat,but,bite
* 匹配零个或多个它前面的字符 ‘f*n’匹配字符n前面有任意个字符f fn,fan,faan,abcn
+ 匹配前面的字符1次或多次 ‘ba+’匹配发b开头后面紧跟至少有一个a ba,bay,bare,battle
<字符串> 匹配包含指定的字符串的文本 ‘fa’ fan,afa,faad
[字符集合] 匹配字符集合中的任何一个字符 ‘[xz]’匹配x或者z dizzy,zebra,x-ray,extra
[^] 匹配不在括号中的任何字符 ‘[^abc]’匹配非abc的字符串 desk,fox,f8ke
字符串{n,} 匹配前面的字符串至少n次 b{2}匹配2个或更多的b bbb,bbbbb,bbbbbbb
字符串{n,m} 匹配前面的字符串至少n次,至多m次。如果n为0,此参数为可选参数 b{2,4}匹配最少2个,最多4个b bb,bbb,bbbb
下面详细介绍在MySQL中如何使用正则表达式。
1、查询以特定字符或字符串开头的记录
字符’^’匹配以特定字符串开头的文本。
首先创建一个数据表fruits
\
向数据表fruits插入数据
\
例:在fruits表中,查询f_name字段以字母‘b’开头的记录,输入SQL语句如下:
\
执行后得:
\
例:在fruits表中,查询f_name字段以“be”开头的记录,输入SQL语句如下:
\
执行后得:
\
2、查询以特定字符或字符串结尾的记录
字符’$’匹配以特定字符或字符串结尾的记录
例:在fruits表中,查询f_name字段以字母‘y’结尾的记录,输入SQL语句如下:
\
执行后得:
\
例:在fruits表中,查询f_name字段以字符串“rry”结尾的记录,输入SQL语句如下:
\
执行后得:
\
3、用符号“.”来替代字符串中的任意一个字符
字符 ‘.’ 匹配任意一个字符。
例:在fruits表中,查询f_name字段值包含字母‘a’与‘g’且两个字母之间只有一个字母的记录,输入SQL语句如下:
\
执行后得:
\
查询语句中’a.g’指定匹配字符中要有字母a和g,且两个字母之间包含单个字符,并不限定匹配的字符的位置和所在查询字符串的总长度。
4、使用“*”和“+”来匹配多个字符
星号 ‘*’匹配前面的字符任意多次,包括0次。加号’+’匹配前面的字符至少一次。
例:在fruits表中,查询f_name字段值以字母‘b’开头,且‘b’后面出现字母‘a’的记录,输入SQL语句如下:
\
执行后得:
\
星号 ‘*’可以匹配任意多个字符,blackberry和berry中字母b后面并没有出现字母a,但是也满足匹配条件。
例:在fruits表中,查询f_name字段值以字母‘b’开头,且‘b’后面出现字母‘a’至少一次的记录,输入SQL语句如下:
\
执行后得:
\
‘a+’ 匹配字母 ’a’ 至少一次,只有banana满足匹配条件。
5、匹配指定字符串
正则表达式可以匹配指定字符串,只要这个字符串在查询文本中即可,如要匹配多个字符串,多个字符串之间使用分隔符 ’|’ 隔开。
例:在fruits表中,查询f_name字段值包含字符串“on”的记录,输入SQL语句如下:
\
执行后得:
\
例:在fruits表中,查询f_name字段值包含字符串“on”或者“ap”的记录,输入SQL语句如下:
\
执行后得:
\
提示:LIKE运算符也可以匹配指定的字符串,但与REGEXP不同,LIKE匹配的字符串如果在文本中间出现,则找不到它,相应的行也不会返回。而REGEXP在文本内进行匹配,如果被匹配的字符串在文本中出现,REGEXP将会找到它,相应的行也会被返回。如下例:
例:在fruits表中,使用LIKE运算符查询f_name字段值为“on”的记录,输入SQL语句如下:
\
执行后得:
\
f_name字段没有值为“on”的记录,返回结果为空。
 
6、匹配指定字符串中的任意一个
方括号“[]”指定一个字符集合,只匹配其中任何一个字符,即为所查找的文本。
      例:在fruits表中,查找f_name字段中包含字母o或者t的记录,输入SQL语句如下:
\
执行后得:
\
查询结果可以看到,所有返回的记录的f_name字段的值中都包含有字母o或者t,或者两个都有。
      方括号“[]”还可以指定数值集合。
      例:在fruits表,查询s_id字段中数值中包含4、5或者6的记录,输入SQL语句如下:
\
执行后得:
\
      匹配集合“[456]”也可以写成“[4-6]”即指定集合区间。例如“[a-z]”表示集合区间为从a~z的字母,“[0-9]”表示集合区间为所有数字。
7、匹配指定字符以外的字符
“[^字符集合]”匹配不在指定集合中的任何字符。
例:在fruits表中,查询f_id字段包含字母a到e和数字1到2以外的字符的记录,输入SQL语句如下:
\
执行后得:
\
 
8、使用{n,}或者{n,m}来指定字符串连续出现的次数
      “字符串{n,}”表示至少匹配n次前面的字符;“字符串{n,m}”表示匹配前面的字符串不少于n次,不多于m次。例如,a{2,}表示字母a连续出现一马当先次,也可以大于2次;a{2,4}表示字母a连续出现最少2次,最多不能超过4次。
      例:在fruits表中,查询f_name字段值出现字符串‘x’至少2次的记录,输入SQL语句如下:
\
执行后得:
\
例:在fruits表中,查询f_name字段值出现字符串“ba”最少1次,最多3次的记录,输入SQL语句如下:
\
执行后得:
\