MySQL必知必会 学习笔记 第九章 用正则表达式进行搜索

正则表达式是用来匹配文本的特殊的串,它用正则表达式语言来建立。

MySQL支持的正则表达式仅为正则表达式的一个很小的子集。

可通过WHERE子句使用正则表达式过滤SELECT检索出的数据。

检索条件列包含字符100的所有行:

SELECT columnName
FROM tableName
WHERE columnName REGEXP '.00';

以上正则表达式.00中的点表示匹配任意一个字符。

LIKE匹配整个列,而REGEXP会在列中找是否有符合模式串的部分,如果存在此部分就会返回该行。

MySQL 3.23.4后,正则表达式匹配不区分大小写,为区分大小写,可在使用BINARY关键字:WHERE columnName REGEXP BINARY '.00'

检索条件列包含字符100或200的所有行:

SELECT columnName
FROM tableName
WHERE columnName REGEXP '100|200';

使用字符集合检索条件列包含字符100或200或300的所有行:

SELECT columnName
FROM tableName
WHERE columnName REGEXP '[123]00';

以上正则表达式是缩写,也可写为[1|2|3]00

检索条件列不包含字符100或200或300的.00的所有行:

SELECT columnName
FROM tableName
WHERE columnName REGEXP '[^123]00';

字符集合可被简化,[2-9]表示不含1的数字集合,[b-z]表示不含a的字母集合。

使用转义符\检索条件列含特殊字符如.的所有行:

SELECT columnName
FROM tableName
WHERE columnName REGEXP '\\.';    # MySQL字符串中,\也表示转义符,因此需要两个\\,MySQL解释一个,正则库解释一个

转义方括号时:
在这里插入图片描述
在这里插入图片描述

转义符也能用来引用元字符:
在这里插入图片描述

字符类是预定义的字符集:
在这里插入图片描述
上表中有2个错误,一是[:blank:]并不等同于[\\t],后者只会匹配制表符;二是[:punct:]只匹配标点字符,而根据上表中的描述,空格字符也会被匹配到。
在这里插入图片描述
'\\([0-9] sticks?\\)'中的\\(会匹配([0-9]会匹配数字,sticks?会匹配sticksticks(?会匹配它之前的字符出现一次或零次的情况),\\)会匹配)

[[:digit:]]{4}匹配连续出现的四个任意数字。

在这里插入图片描述
^[0-9\\.]表示匹配以数字或点开头的文本。^放在集合中表示否定该集合,放在开头表示串的开始处。

可同时使用^$像LIKE一样匹配整个串:
在这里插入图片描述
不使用数据库表的情况下测试正则表达式:

SELECT 'hello' REGEXP '[0-9]';

运行它:
在这里插入图片描述
REGEXP总是返回0(匹配失败)或1(匹配成功)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值