mysql 必知必会整理—sql 正则表达[五]

前言

简单整理一下sql 正则表达式。

正文

正则表达式是用来匹配文本的特殊的串(字符集合)。如果你想从一个文本文件中提取电话号码,可以使用正则表达式。如果你需要查找名字中间有数字的所有文件,可以使用一个正则表达式。如果你想在一个文本块中找到所有重复的单词,可以使用一个正则表达式。

如果你想替换一个页面中的所有URL为这些URL的实际HTML链接,也可以使用一个正则表达式(对于最后这个例子,或者是两个正则表达式)。

正则表达式用正则表达式语言来建立,正则表达式语言是用来完成刚讨论的所有工作以及更多工作的一种特殊语言。与任意语言一样,正则表达式具有你必须学习的特殊的语法和指令。

下面进行举例:

上述通过正则表达查找出product name包含1000的字符。

那么如果包含 1000,2000

注:里面只有1000和 2000。

上面中查找出包含1000或者包含任意+000的,那么是否能有和like 一样的以什么开头的呢?例如:like '1000%'

在正则中也是有的,如"^" 是以什么什么开头,"$"是以什么什么结尾。

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

上面通过".000" 匹配了里面有1000或者2000的,那么是否有其他方式?

可以通过这样的|来匹配:

匹配任何单一字符。但是,如果你只想匹配特定的字符,怎么办?可通过指定一组用[和]括起来的字符来完成,如下所示:

同样的,那么是否可以使用|的方式来匹配呢?

可以看到是不行的,为啥不行呢?这个问题其实也是比较简单的,因为里面的是1 或者2或者 3Ton,所以这种不如[]来的方便,且不容易出错。

同样^ 可以表示以什么什么开头,同意如果在[]中,那么表达的意思是否定的意思。

里面这个框框就表示了除了123外的其他字符。

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

范围不限于完整的集合,[1-3]和[6-9]也是合法的范围。此外,范围不一定只是数值的,[a-z]匹配任意字母字符。

下面介绍一下匹配特殊字符:

请问,如果你需要匹配这些字符,应该怎么办呢?例如,如果要找出包含.字符的值,怎样搜索?请看下面的例子:

这个例子是错误的,因为.表示任意字符,需要这样写:

select *
from products
where prod_name REGEXP '\\.'

使用了\进行转义。

匹配字符类:

存在找出你自己经常使用的数字、所有字母字符或所有数字字母字符等的匹配。为更方便工作,可以使用预定义的字符集,称为字符类(character class)。

上面这个不需要背诵,只需要用的时候查看一下即可。

匹配多个实例:

目前为止使用的所有正则表达式都试图匹配单次出现。如果存在一个匹配,该行被检索出来,如果不存在,检索不出任何行。但有时需要对匹配的数目进行更强的控制。例如,你可能需要寻找所有的数,不管数中包含多少数字,或者你可能想寻找一个单词并且还能够适应一个尾随的s(如果存在),等等。

定位符:

目前为止的所有例子都是匹配一个串中任意位置的文本。为了匹配特定位置的文本.

下一节sql的计算。

posted @ 2021-09-21 20:20  敖毛毛  阅读(452)  评论(0编辑  收藏  举报