SQL的正则表达式

SQL的正则表达式,第1张

注意:正则表达式后面需用''括起来,因为正则表达式是针对“文本”的匹配。

正则表达式REGEXP可以理解为可支持更多规则/通配符的LIKE,可以对检索内容进行更强的控制。LIKE本身只能和%及_这两种通配符连接进行粗略的搜索,而REGEXP可以支持更多规则,比如.是和%一样的可匹配任意一个字符的正则模式,[]可匹配一个范围,如REGEXP '[1-5] ton'可以搜索出来1 ton、2 ton、3 ton、4 ton、5 ton。

一些正则模式:

.  :匹配任意一个字符,类似于%

| :类似于OR

[] :字符集合,可用|隔开表or选项,也可用-定义范围

[^] :类似于NOT,匹配非[]框内的

定位元字符 :

^ :匹配输入字符串的开始位置【^有两种用法,一种是开始位置,一种和[]连在一起表示NOT】

$ :匹配输入字符串的结束位置

[[:<:]] :词的开始

[[:<:]] :词的结尾

字符类 (预定义的字符集,类似“快捷键”):

重复元字符 :

* :0次或多次匹配

+ :1次或多次匹配(等于{1,})

? :匹配它前面的任何字符0次或1次(等于{0,1})

{n} :指定数目的匹配

{n,} :不少于指定数目的匹配

{n,m} :匹配数目的范围(m不超过255)

正则表达式略复杂,但用好了会非常方便,所以务必把各种正则模式记熟。

关于特殊字符所在位置会造成不同影响,有个小例子:

^[0-9\\.]表示查找以0-9里任意一个数字和“.”开头的字符串

[^0-9\\.]表示除了“0-9.”这个单词外的任意字符串

转义

如果想搜出代表正则模式字符本身,比如想查找“.”,如果直接输REGEXP '.',那么查找出来的将是全部行,因为“.”表示任意字符;又比如想查找“|”,直接输REGEXP '|',那么查找不出结果,因为正则表达式认为这是or的含义,此时需要用到“转义”的功能,即在想查找的特殊字符前输入两条斜杠——“//”,告诉正则表达式现在要查找的是特殊字符本身,而不是它所代表的含义。

另外还有一些在SQL练习中碰到的其他注意事项:

NOT只对单个字段有效,如果想多重否定,需要在每个字段前都加上NOT,比如 WHERE vend_id NOT IN(1002,1003)  AND prod_price NOT IN (5.99)

通配符%可以任意长度的字符,包括0字符,但不能匹配出NULL;_只能匹配单个字符。注意尽量少使用通配符,并且尽量不要在开头使用,避免搜索时间过长。

查询语句:

结果:

查询语句:

结果:

查询语句:

结果:

查询语句:

正则表达式 [32]1,[32]定义一组字符,它的意思是匹配 3 或匹配 2,也就是「31」或者 「21」都算是匹配的。

结果:

查询语句:

结果:

如果要匹配特殊字符的,需要加上前导「\」,「\-」表示查找「-」,「\.」表示查找「.」

这种就是 「转义(escaping)」 ,在正则表达式里,本身有意义的字符,比如「.」是匹配任意字符的意思。那如果要匹配它,需要转义。

注意:在 MySQL 里,是比其他的正则表达式多一个「\」的,就是「\」。

趣味提问:

如何匹配「\」?

答案:「\\」

\\([0-9] sticks?\\) 匹配的是(NUM stick)或者(NUM sticks)。s后的 ? 使得s可选。

重复元字符

* 是 0 个或多个匹配

? 是 1 个或多个匹配

{n} 是指定n个匹配

{n,} 是 不少于 n 个匹配

{n,m} 是 指定匹配的范围,m不超过 255

查询语句:

^值的是字符串的开始,$是字符串的结尾。

这就是 REGEXP 与 LIKE 类似,但是它独特的好处:可以通过「定位符」只匹配「子字符串」。

结果:

SQL正则表达式可以用来搜索和匹配连续增加数字的字符串。如果要搜索从1开始的连续增加的数字,可以使用以下表达式:"\d+",这可以匹配一位或多位数字,例如:1,2,3,4,5等。

如果要搜索从某个特定数字开始的连续增加的数字,可以使用以下表达式:"[start_num-9]+",其中start_num可以替换为任何数字。例如,如果要搜索从10开始的连续增加的数字,可以使用"[10-9]+",这会匹配10,11,12,13,14,15等。

如果要搜索从某个特定数字开始,并且增加的步长不一样的连续增加的数字,可以使用以下表达式:"[start_num-step_size]+",其中start_num是起始数字,step_size是增加的步长,例如,如果要搜索从10开始,并且每次增加2的连续增加的数字,可以使用"[10-2]+",这会匹配10,12,14,16,18等。

总的来说,使用正则表达式可以搜索和匹配各种连续增加的数字,只要根据自身的需求调整表达式即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10653789.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存