第9章 用正则化表达式进行搜索

正则化表达式:用来匹配文本的特殊的串(字符集合)。正则化表达式用正则表达式语言来建立
MySQL和正则表达式的关系
MySQL使用WHERE子句对正则表达式提供了初步的支持,允许你指定正则表达式,过滤SELECT检索出的数据

1.基本字符匹配

SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000'
ORDER BY prod_name;

SELECT prod_name
FROM products
WHERE prod_name REGEXP '.000'
ORDER BY prod_nam;

. 是正则化表达式语言中一个特殊的字符,表示匹配任意一个字符
LIKE和REGEXP的区别:
MySQL正则化表达式匹配不区分大小写,如果要区分大小写,在REGEXP后面使用关键字BINARY
2.进行OR匹配

SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000|2000'
ORDER BY prod_name;

|从功能上类似于在SELECT语句中使用OR语句

'1000|2000|3000’将匹配1000或2000或3000

3.匹配几个字符之一
使用[]匹配特定的字符

SELECT prod_name
FROM products
WHERE prod_name REGEXP '[123] Ton'
ORDER BY prod_name;
结果
1 ton anvil
2 ton anvil

[]是另一种形式的OR语句
[^123]匹配除这些字符之外的任何东西
4.匹配范围
集合可以定义要匹配的一个或者多个字符

SELECT prod_name
FROM products
WHERE prod_name REGEXP '[1-5] Ton'
ORDER BY prod_name;

#不限于数值型的范围

SELECT prod_name
FROM products
WHERE prod_name REGEXP '[a-z] Ton'
ORDER BY prod_name;

5.匹配特殊的字符
为了匹配特殊的字符,必须使用\作为前导(转义)
例如:\-表示查找-
\.表示查找.
\也可以用来引用元字符
\f 换页
\n 换行
\r 回车
\t 制表
\v 纵向制表

匹配\ 使用\\

6.定位符

匹配指定位置的文本信息
定位元字符
^文本的开始
$ 文本的结尾
[[:<:]] 词的开始
[[:>:]]词的结尾

例子:如果想查找一个数(包括一小数点开始的数)开始的信息,怎么办?简单搜索[0-9\.]或者[[:digit:]\.]是不行的,因为它将在文本内任意位置进行查找匹配
解决办法使用定位符^

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

表示匹配串的开始,[0-9\.]只在.或者任意数字为串中第一个字符时才匹配他们

^的两种用途
1.在集合[]中出现,表示否定该集合
2.在其它地方出现,表示用来指定串的开始处

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值