SQL语句学习7——正则表达式

1.1正则表达式介绍

(1)正则表达式是用来匹配文本的特殊字符串(字符集合)所有种类的程序设计语言,文本编辑器,操作系统等都支持正则表达式
(2)正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较
(3)正则表达式不区分大小写(即大小写都将会被匹配),如果想要区分大小写,可以加关键字BINARY
让我们来看一个例子:
在这里插入图片描述
上图语句表示:REGEXP后所跟的东西作为正则表达式,它表示将匹配prod_name列中出现1000的行

1.2进行OR匹配

如下图:
在这里插入图片描述
上图表示匹配prod_name列中含有1000或者2000的行

符号’|'为正则表达式的OR操作符,它表示匹配其中之一

1.3匹配几个字符之一

如果你想匹配单个字符,可以通过符号’[]'指定,如下图:
在这里插入图片描述
上图表示,将匹配prod_name中出现1或者2或者3的行

需要注意的是:符号’[]'中的只能匹配单个字符,而不能匹配多个字符,如下图:
在这里插入图片描述
我们本来的意思是匹配prod_name中出现1000或者2000的行,但是返回的结果却不是我们期望的,因为正则表达式只会匹配[]中的单个字符,所以这个语句的意思是匹配prod_name列中出现1或者0或者2的行,而不是匹配出现1000或者2000的行
在这里插入图片描述
即使在1000和2000中间增加了“|”操作符也不行,只能匹配单个,不能多也不能少。

1.4匹配范围

如下图:
在这里插入图片描述
上图表示匹配1到5中的数字,因此我们可以看到,.5 ton anvil也被匹配,因为5 ton符合匹配条件

1.5匹配特殊字符

正则表达式语言由具有特定含义的特殊字符组成。,看如下例子:
在这里插入图片描述
我们本意是要搜索出含有字符’.‘的行,但是却匹配了所有的行,原因是在正则表达式中,符号’.'表示匹配所有的行,因此它将所有的行全部输出

为了匹配特殊字符,必须用\作为前导
如下:
在这里插入图片描述
上图就能正确的匹配出vend_name中含有符号’.'的行

补充:正则表达式内具有特殊意义的所有字符都必须以这种方式转义

1.6匹配字符类

为了使用方便,可以使用预定义的字符集:

说明
[:alnum:]任意字母和数字(同[a-zA-Z0-9])
[:alpha:]任意字符(同[a-zA-Z])
[:blank:]空格和制表(同[\t])
[:cntrl:]ASCII控制字符(ASCII0到31和127)
[:digit:]任意数字(同[0-9])
[:graph:]任意打印字符,但不包括空格
[:lower:]任意小写字母([a-z])
[:upper:]任意大写字母(同[A-Z])
[:print:]任意可打印字符
[:punct:]既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:]包括空格在内的任意空白字符(同[\t\n\r\t\v])
[:xdigit:]任意十六进制数字

下面给出ASCII表:
在这里插入图片描述

1.7匹配多个实例

重复元字符:

元字符说明
*0个或者多个字符
+1个或者多个匹配
0个或1个匹配
{n}指定数目匹配
{n,}不少于指定数目的匹配
{n,m}匹配数目的范围

重复元字符是匹配指定前面的字符
下面看一个例子:
在这里插入图片描述
上图表示:匹配prod_name中含有字串([:digit;] sticks?)的行,我们来解读一下这个子串:
首先在括号里面有一个数字(对应[:digit:]),然后重复元字符‘?’匹配它前面字符的0次或者1次,所以就使得s可选。
在这里插入图片描述
在上图中,重复元字符’+'匹配它前面的任何字符的一个或者多个
在这里插入图片描述
我们在AN后面加了一个重复元字符,表示匹配出现字符N零次或者一次那么换句话来说就是匹配出现’A’或者‘AN’的行

我们再看一个例子:
在这里插入图片描述
我们在ANV后面加了一个重复元字符?,表示匹配V零次或者一次,换句话来说,就是匹配出现了‘AN’或者’ANV’的行

再看个例子:
在这里插入图片描述
我们在00后面增加了一个重复元字符+,表示匹配1个或者多个0,换句话来说,就是匹配出现00,000,000……的行

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值