本文共 1499 字,大约阅读时间需要 4 分钟。
一、正则表达式
之前介绍的筛选数据的方法包括匹配、比较和通配符等等,对于基础的数据过滤也基本够用了,但考虑到数据筛选中往往还需要一些更复杂的情况需要正则表达式来实现,比如从文本中提取电话号码,找寻名字中有数字的文本等;正则表达式就是通过将一种数据文本模式与数据库中的文本串进行比较,来匹配文本。需要说明的是,MySQL中可以实现的正则表达式仅仅只占全部的一小部分。
1,基本的正则表达式字符:
REGEXP关键字取代LIKE ,提示MySQL后面跟的东西为正则表达式
(1)"." 表示匹配任意一个字符;
这个例子中REGEXP 和LIKE 的作用似乎相同,但是两者也是有区别的,不用通配符%的话,如果文本中出现被匹配的文本,LIKE 是不会返回数据的,而REGEXP 则会,可参考这个例子:
(2)“|” 表示正则表达式的“OR” 字符;
(3)“[ ]"同|一样,是'or"字符,;
这两者都是表示或的意思,[] 是为了有时候定义OR 语言的查找范围,具体可见下面的例子:
第一个例子表达的实际意思是 prod_name 中有 1、2或者'3 ton '的数据,而第二个例子表达的实际意思是 prod_name 中有'1 ton'\'2ton'\'3ton '的数据
(4) ”^" 字符,表示否定;
在集合的开始处放一个^即表达否定,如[^123]表达出去1、2、3 之外的其他数据。
(5)“-”字符,表示范围;
简单 [0-9] 表示[0123456789],同样的,还有[A-Z]任意字母字符。
(6)转义字符:\\;为了匹配之前介绍的有特殊意义的字符,在MySQL中“\\^"表示匹配有^的数据。
2 字符类:
有一些常用的数据或者字母字符等等,在MySQL中有预定义的字符集,称之为字符类:
[:alnum:] =[a-zA-Z0-0],任意字母和数字;
[:alpha:] =[a-zA-Z] 任意字符;
[:blank:] =[\\t] 任意制表符;
[:cntrl:] ASCII控制数字,ASCII 0到31和127 (?)
[:digit:] =[0-9]任意数字;
[:print:] 任意可打印字符
[:graph:] 任意可打印字符,但不包括空格;
[:lower:] 任意小写字母;
[:punct:] 即不在[:alnum:] 又不在[:cntrl:]中的任意字符;
[:space:] =[\\f\\n\\r\\t\\v] 任意空白符 包括空格在内
[:upper:] 任意大写字母;
[:xdigit:] 任意十六进制数字;
3重复元字符
如果不仅需要匹配正确的内容,还需要匹配确定的数量,就需要正则表达式重复元字符:
* 0或者任意个匹配;
+ 1或者多个匹配 ;
? 0或者1个匹配;
{n} 指定数目(n)个匹配;
{n,} 不少于n个匹配;
{n,m} 匹配数目范围的匹配,n-m 个匹配;
这里的sticks?中 ?表示有0或者1个s,即匹配stick或sticks,\\(和\\)是转义字符,分别匹配( 和)。
这个中的’[:digit:]{4}'表示匹配四个连在一起的任意数字,即任意四位数字。
4 定位符
^ 表示文本的开始;
$ 表示文本的结尾;
[[:<:>
[[:>:]] 表示词的结尾。
后面两个词的开始和结尾暂时没看到网上的笔记中有提到,也没想到什么具体的例子来编代码试试,等后面有看到或者想到再说。
REGEXP+正则表达式和LIKE +通配符在很多地方的作用是同样的,但是在一些复杂的情况下,也会有只能用正则表达式来实现的例子。
转载地址:https://blog.csdn.net/weixin_32048757/article/details/113088403 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!