输入
SELECT prod_name FROM products WHERE prod_name REGEXP '[1-5] Ton' ORDER BY prod_name;
输出
分析
这里使用正则表达式[1-5] Ton。[1-5]定义了一个范围,这个表达式意思是匹配1到5,因此返回3个匹配行。由于5 ton匹配,所以返回.5 ton。
😇匹配特殊字符
正则表达式语言由具有特定含义的特殊字符构成。我们已经看到.[]、|和-等,还有其他一些字符。请问,如果你需要匹配这些字符,应该怎么办呢?例如,如果要找出包含.字符的值,怎样搜索?请看下面的例子:
输入
SELECT vend_name FROM vendors WHERE vend_name REGEXP '.' ORDER BY vend_name;
输出
分析
🌼这并不是期望的输出,.匹配任意字符,因此每个行都被检索出来。
为了匹配特殊字符,必须用11为前导。1l-表示查找-, 表示查找.
输入
SELECT vend_name FROM vendors WHERE vend_name REGEXP '\\.' ORDER BY vend_name;
输出
分析
这才是期望的输出。ll.匹配.,所以只检索出一行。这种处理就是所谓的转义 (escaping),正则表达式内具有特殊意义的所有字符都必须以这种方式转义。这包括.、1、[]以及迄今为止使用过的其他特殊字符。
😇匹配字符类
⭐存在找出你自己经常使用的数字、所有字母字符或所有数字字母字符等的匹配。为更方便工作,可以使用预定义的字符集,称为字符类character class)。表9-2列出字符类以及它们的含义。
字符类*
😇匹配多个实例
概要
🌕目前为止使用的所有正则表达式都试图匹配单次出现。如果存在一个匹配,该行被检索出来,如果不存在,检索不出任何行。但有时需要对匹配的数目进行更强的控制。例如,你可能需要寻找所有的数,不管数中包含多少数字,或者你可能想寻找一个单词并且还能够适应一个尾随的s(如果存在),等等。
重复元字符
举例分析
下面举几个例子。
输入
SELECT prod_name FROM products WHERE prod_name REGEXP '\\([0-9] sticks?\\)' ORDER BY prod_name;
输出
分析
正则表达式1([0-9] sticks?\)需要解说一下。l1(匹配)[0-9]匹配任意数字(这个例子中为1和5),sticks?匹配stick和sticks (s后的?使s可选,因为?匹配它前面的任何字符的0次或1次出现),\)匹配)。没有?,匹配stick和sticks会非常困难。
😇定位符
目前为止的所有例子都是匹配一个串中任意位置的文本。为了匹配特定位置的文本,需要使用表列出的定位符
定位符表
举例概述
🌠例如,如果你想找出以一个数 (包括以小数点开始的数) 开始的所有产品,怎么办?简单搜索0-9\.不行,因为它将在文本内任意位置查找匹配。解决办法是使用~定位符,如下所示
输入
SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9\\.]' ORDER BY prod_name;
匹配串的开始。因此,^ [0-91\.]只在或任意数字为串中第一个字符时才匹配它们。没有^,则还要多检索出4个别的行(那些中间有数字的行)。
🤣如何巩固学习
提示:在学习的过程中,我们需要先自行进行思考,而不是一遇到不会的就放弃思考直接看答案,如果最后遇到真的不会的题目,我们可以适当的进行观看答案,看自己的思路是否正确,在作出正确的判断
🤣本文小结
本文章介绍了正则表达式的基础知识,学习了如何在MySQL的SELECT语中通过REGEXP关键字使用它们。
好啦今日的分享到这里就结束啦,我是爱你们的M malloc希望可以帮助到你们噢,最后别忘记三连啦!!