第九章-用正则表达式进行搜索

9.1正则表达式介绍

正则表达式是用来匹配文本的特殊的串(字符集合)。

与任意语言一样,正则表达式具有你必须学习的特殊的语法和指令。

9.2使用MySQL正则表达式

正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较,MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定正则表达式过滤SELECT检索出的数据

注意:MySQL仅支持多数正则表达式实现的一个很小的子集。

9.2.1基本字符匹配

**输入:**SELECT prod_name FROM products WHERE prod_name REGEXP ‘1000’ ORDER BY prod_name;

分析: 除了关键字LIKE被REGEXP替代外,这条语句非常像使用LIKE语句,他告诉MySQL:REGEXP后所跟的东西作为正则表达式(与文字正文1000匹配的一个正则表达式)处理

输入: SELECT prod_name FROM products WHERE prod_name REGEXP ‘.000’ ORDER BY prod_name;

分析: 这里使用正则表达式.000 。==.==是正则表达式语言中一个特殊的 字符,他表示匹配任意一个字符。

注意:
MySQL中的正则表达式匹配(自版本3.23.4后)不区分大小写( 即,大写和小写都匹配)。为区分大小写,可使用BINARY关键字,如WHERE prod_ name REGEXP
BINARY ’ JetPack .000’。

9.2.2进行OR匹配

输入: SELECT prod_name FROM products WHERE prod_name REGEXP ‘1000|2000’ ORDER BY prod_name;

分析: 语句中使用正则表达式1000|2000为正则表达式的OR操作符,他表示匹配其中之一,相当于OR语句。

9.2.3匹配几个字符之一

匹配任何单一字符,但是,如果你只想匹配特定的字符,可以通过指定一组用==[]==括起来的字符来完成。

输入: SELECT prod_name FROM products WHERE prod_name REGEXP ‘[123] Ton’ ORDER BY prod_name;

分析: 这里,使用正则表达式[123] Ton。[123]定义一组字符,他的意思是匹配1或2或3,因此,1 ton 2 ton 3 ton都可以匹配且返回。

9.2.4匹配范围

集合可以用来定义要匹配的一个或多个字符,例如,下面的集合将匹 配数字0到9:

[0123456789]

为简化这种类型的集合,可使用-来定义一个范围。下面的式子功能 上等同于上述数字列表:

[0-9]

输入: SELECT prod_name FROM products WHERE prod_name REGEXP ‘[1-5]’ Ton ORDER BY pord_name;

分析: 这里使用正则表达式[1-5] Ton [1-5]定义了一个范围,这个表达式的意思是匹配1到5

9.2.5匹配特殊字符

为了匹配特殊字符,必须用\为前导。\\-表示查找-,\\.表示查找.。

 SELECT vend_name FROM vendors WHERE vend_name REGEXP ' \\.' ORDER BY vend_name;

分析:

\\.匹配.,这种处理方式称之为转义

9.2.6匹配字符类

9.2.7 匹配多个实例

重复元字符

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

输入:

SELECT prod_name FROM products WHERE prod_name REGEXP '\\([0-9] sticks?)' ORDER BY prod_name;

分析: sticks? 匹配stick和sticks,?表示0个或1个匹配

输入:

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

分析: [:digit:]匹配任意数字 ,{4}:确切的要求他前面的字符(任意数字),出现4次,匹配prod_name文本中包含4个任意连在一起的数字

9.2.8定位符

目前为止的所有例子都是匹配一个串中任意位置的文本,为了匹配特定位置的文本,需要使用定位符

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

输入:

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

分析:\ ^ 匹配串的开始。因此,1只在.或任意数字为串中第 一个字符时才匹配它们。没有^,则还要多检索出4个别的行(那些中间有数字的行)。

####小技巧

简单的正则表达式测试:可以在不使用数据库表的情况下用SELECT来测试正则表达式。REGEXP检查总是返回0(没有匹配)或1(匹配)。可以用带文字串的REGEXP来测试表达式,并试验它们。相应的语法如下:

这个例子显然将返回0(因为文本hello中没有数字)。

9.3小结

本章介绍了正则表达式的基础知识,学习了如何在MySQL的SELECT 语句中通过REGEXP关键字使用它们。


  1. 0-9\\. ↩︎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值