【MySQL学习】使用正则表达式进行搜索

简介

如果通配符无法满足你的匹配要求,那么就要尝试正则表达式了。所有种类的程序设计语言、文本编辑器、操作系统等都支持正则表达式。MySQL中的正则表达式仅仅为正则表达式语言的子集,下面我们来了解几种常见的正则表达式。

使用MySQL正则表达式

正则表达式搜索依然需要WHERE字句的支持,它允许你制定正则表达式,过滤SELECT检索出的数据。

基本字符匹配

下面语句检索列 prod_name 包含文本 1000 的所有行:

SELECT prod_name
FROM products
WHERE prod_name REGEXP "1000"
ORDER BY prod_name;
##REGEXP是用来代替LIKE的,用法类似且后面跟正则表达式

下面这个例子则是通配符很难完成的

SELECT prod_name
FROM products
WHERE prod_name REGEXP ".000"
ORDER BY prod_name;

正则表达式 .000 表示匹配任意一个字符后面加上000。

LIKE和REGEXP有一个很大的差别,LIKE匹配整个列而REGEXP在列值内进行匹配。

MySQL中的正则表达式只能用 BINARY关键字来区分大小写,比如 WHERE prod_name REGEXP BINARY ‘JetPack .000’

“or”匹配

使用 | 来表示“或”操作。

匹配几个字符之一

使用 [] 来表示“和”操作,例如 [123] 表示匹配1或者2或者3。

匹配范围

使用“0-9”来代替“0123456789”

否定匹配

使用“^”来表示否定

特殊字符匹配

使用“\\”来匹配特殊字符

空白元字符

元字符说明
\\f换页
\\n换行
\\r回车
\\t制表
\\v纵向制表

匹配字符类

存在找出你自己经常使用的数字机、所有字母字符或者所有字母数字字符的匹配。MySQL有这些预定义的字符集,称为字符类(character class)
常用的字符串函数有这些:https://www.cnblogs.com/geaozhang/p/6739303.html

匹配多个实例

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

举几个例子

SELECT prod_name
FROM products
WHERE prod_name REGEXP "\\([0-9] STICKS?\\)"
##这里的\\省略也没事,在MySQL5里面括号不需要转译。
ORDER BY prod_name;

输出是:

+----------------+
| prod_name      |
+----------------+
| TNT (1 stick)  |
| TNT (5 sticks) |
+----------------+
2 rows in set (0.00 sec)

下面这个例子是匹配连在一起的四个数字

SELECT prod_name
FROM products
WHERE prod_name REGEXP "[[:digit:]]{4}"
ORDER BY prod_name;

输出是:

+--------------+
| prod_name    |
+--------------+
| JetPack 1000 |
| JetPack 2000 |
+--------------+
2 rows in set (0.00 sec)

定位符

元字符说明
^文本的开始
$文本的结尾
[[:<:]]词语的开始
[[:>:]]词语的结尾

例如,你想找出一个数(包括一小数点开始的数)开始的所有产品。简单的搜 [0-9\.] 是不行的,因为它将在文本内任意位置查找匹配,此时我们应该使用 ^ 定位符,如下所示

SELECT prod_name
FROM products
WHERE prod_name REGEXP "^[0-9\\.]"
ORDER BY prod_name;

如果不加入定位符,将会找的四个别的行,他们中间有数字

+--------------+
| prod_name    |
+--------------+
| .5 ton anvil |
| 1 ton anvil  |
| 2 ton anvil  |
+--------------+
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值