【MySQL必知必会(六)】【用正则表达式进行搜索】

上一篇:【MySQL必知必会(五)】【用通配符进行过滤】

+++++++++++++开始线++++++++++++++++

文章目录

  • 一、 正则表达式介绍
  • 二、 使用MySQL正则表达式
    • 2.1 基本字符匹配
    • 2.2 进行OR匹配
    • 2.3 匹配几个字符之一
    • 2.4 匹配范围
    • 2.5 匹配特殊字符
    • 2.6 匹配多个实例
    • 2.8 定位符

一、 正则表达式介绍

所有种类的程序设计语言、文本编辑器、操作系统都支持正则表达式。

二、 使用MySQL正则表达式

MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定正则表达式,过滤SELECT检索出的数据

仅为正则表达式语言的一个子集
MySQL仅支持多数正则表达式实现的一个很小的子集

2.1 基本字符匹配

mysql> SELECT prod_name
    -> FROM products
    -> WHERE prod_name REGEXP '1000'
    -> ORDER BY prod_name;

【MySQL必知必会(六)】【用正则表达式进行搜索】_第1张图片

分析

这条语句看上去非常像使用LIKE的语句。REGEXP后跟的东西作为正则表达式处理

mysql> SELECT prod_name
    -> FROM products
    -> WHERE prod_name REGEXP '.000'
    -> ORDER BY prod_name;

【MySQL必知必会(六)】【用正则表达式进行搜索】_第2张图片

分析

.是正则表达式语言中一个特殊的字符。它表示匹配任意一个字符,所以1000和2000都匹配且返回

LIKE与REGEXP

LIKE匹配整个列。如果被匹配的文本在列值中出现,LIKE将不会找到,相应的行也不被返回。而REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回。

2.2 进行OR匹配

为搜索两个串之一,使用|

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

【MySQL必知必会(六)】【用正则表达式进行搜索】_第3张图片

2.3 匹配几个字符之一

通过指定一组[和]括起来的字符

mysql> SELECT prod_name
    -> FROM products
    -> WHERE prod_name REGEXP '[123] Ton'
    -> ORDER BY prod_name;

【MySQL必知必会(六)】【用正则表达式进行搜索】_第4张图片

分析

[123]Ton为[1|2|3]Ton的缩写

mysql> SELECT prod_name
    -> FROM products
    -> WHERE prod_name REGEXP '1|2|3 Ton'
    -> ORDER BY prod_name;

【MySQL必知必会(六)】【用正则表达式进行搜索】_第5张图片

分析

[^123]匹配除这些字符外的任何东西

2.4 匹配范围

集合可用来定义要匹配的一个或多个字符

范围不限于完整的集合,范围不一定只是数值,[a-z]匹配任意字符字符

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

【MySQL必知必会(六)】【用正则表达式进行搜索】_第6张图片

2.5 匹配特殊字符

mysql> SELECT vend_name
    -> FROM vendors
    -> WHERE vend_name REGEXP '.'
    -> ORDER BY vend_name;

【MySQL必知必会(六)】【用正则表达式进行搜索】_第7张图片

分析

.匹配任意字符,因此每个行都被检索出来

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

【MySQL必知必会(六)】【用正则表达式进行搜索】_第8张图片

匹配\

为了匹配反斜杠字符本身,需要使用\\

2.6 匹配多个实例

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

【MySQL必知必会(六)】【用正则表达式进行搜索】_第9张图片

分析

[0-9]匹配任意数字
sticks?匹配stick和sticks

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

【MySQL必知必会(六)】【用正则表达式进行搜索】_第10张图片

分析

[:digit:]匹配任意数字
{4}要求它前面的字符出现4次

mysql> SELECT prod_name
    -> FROM products
    -> WHERE prod_name REGEXP '[0-9][0-9][0-9][0-9]'
    -> ORDER BY prod_name;

【MySQL必知必会(六)】【用正则表达式进行搜索】_第11张图片

2.8 定位符

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

【MySQL必知必会(六)】【用正则表达式进行搜索】_第12张图片

分析

^匹配串的开始

使REGXP起类似LIKE的作用

LIKE和REGEXP的不同在于,LIKE匹配整个串而REGEXP匹配字串。利用定位符,通过用^开始每个表达式,用$结束每个表达式,可以使REGEXP的作用与LIKE一样

+++++++++++++结束线++++++++++++++++

下一篇:【MySQL必知必会(七)】【创建计算字段】

你可能感兴趣的:(MySQL必知必会,mysql,正则表达式)