Mysql - 用正则表达式过滤数据 ( 1 )

数据过滤时,一般使用匹配,比较,通配符等就可完成。但是,随着数据过滤条件的复杂性增加,应该学会使用正则表达式来进行搜索筛选数据。正则表达式是用来匹配文本的字符集合。下面将从几个方面来介绍使用正则表达式过滤数据:


1:基本字符匹配.

首先,看一下即将访问数据表列的数据值:

Mysql - 用正则表达式过滤数据 ( 1 )

接下来,我们来看例子:

Mysql - 用正则表达式过滤数据 ( 1 )

可以看到,WHERE搜索条件下,匹配到包含'数据'的列,那么,REGEXP的作用时什么?先不着急,我们继续深入。看示例:

Mysql - 用正则表达式过滤数据 ( 1 )

注意:.是正则表达式中特殊的字符,它表示匹配任意一个字符所以,'信息系统,操作系统'被匹配。其实REGEXP的作用是:

列内匹配。什么是列内匹配? 好吧,我们不如再来看一个'LIKE与REGEXP差别(重点)'的例子:

Mysql - 用正则表达式过滤数据 ( 1 )

从上图可知,LIKE匹配的是整列,REGEXP在列的内部匹配(类似匹配子串的过程),当然REGEXP也能匹配整列。


2:正则表达式的OR匹配.

为了搜索两个串的任意一个,可以使用正则表达式中的OR操作符 - |,它匹配其中之一例如:

Mysql - 用正则表达式过滤数据 ( 1 )

可以看到,不仅可以使用单个|操作符,也可以使用两个级以上的|操作符。继续深入。


3:匹配几个字符之一.

接下来,讲解另一种形式的OR语句,我们先来看一下,即将使用到的表数据:

Mysql - 用正则表达式过滤数据 ( 1 )

示例如下:

Mysql - 用正则表达式过滤数据 ( 1 )

正则表达式 [123] sub表示:匹配 '1 sub'或'2 sub'或'3 sub',因此返回'1 sub'和'2 sub'。需要提醒的一点是:[123] sub是[1|2|3] sub的缩写两者可以互换使用,但简便起见,还是使用第一种最好。 接下来,我们再来看一个例子,加深理解:

Mysql - 用正则表达式过滤数据 ( 1 )

这并不是预期的结果。出现该结果的原因:Mysql认为你要检索的是:'1'或'2'或'3 sub',而不是像刚才那样的搜索情况。所以为了保险起见,还是将 '1|2|3'放在中括号中。

我们还可以使用 '^'来匹配搜索条件之外的任何东西(先不要区考虑^是个什么东东)。例如上面的例子,只在[1|2|3]的1前面添加一个^,结果如下:

Mysql - 用正则表达式过滤数据 ( 1 )


4:限定匹配范围.

该知识点较为简单,只给出相应示例,希望读者自己可以多多上机操作试验一下:

Mysql - 用正则表达式过滤数据 ( 1 )


小结:Mysql基础的知识点虽然非常简单,但是我们也不能纸上谈兵,应该更多的上机练习,俗话说得好:一回生,二回熟嘛。所以,给自己加油。