- 时间:2021-08-21 23:32 编辑: 来源: 阅读:
- 扫一扫,手机访问
摘要:MYSQL使用正则表达式过滤数据
[b]一、正则与LIKE的区别[/b]
Mysql的正则表达式仅仅使SQL语言的一个子集,可以匹配基本的字符、字符串。
例如:select * from wp_posts where post_name REGEXP'hello',可以检索出列post_name中所有包含hello的行
[b]REGEXP'.og' [/b][b].是正则表达式中里一个特殊的字符。它表示匹配一个字符,因此,dog,hog,mog等等都能匹配。[/b]
[b]注意:
[/b]
关于LIKE和REGEXP的区别:LIKE匹配整个列。[b]如果被匹配的文本仅在列值中出现[/b],LIKE并不会找到它,相应的行也不会返回(当然,使用通配符除外)。而REGEXP在列值内进行匹配,如果被匹配的匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回,这时一个非常重要的差别(当然,如果适应定位符号^和$,可以实现REGEXP匹配整个列而不是列的子集)。
关于大小写的区分:MySQL中正则表达式匹配(从版本3.23.4后)不区分大小写。如果要区分大小写,应该使用BINARY关键字,如where post_name REGEXP BINARY 'Hello.000'
[b]二、基本字符匹配[/b]
检索列prod_name 包含文本1000的所有行:
[img]http://files.jb51.net/file_images/article/201605/201605051039353.png[/img]
[b]进行OR匹配
[/b]相当于:或操作 “|”
[img]http://files.jb51.net/file_images/article/201605/201605051039354.png[/img]
[b]匹配几个字符之一
[/b]只想匹配特定的字符。 可以通过指定一组用[code][[/code]和[code]][/code]括起来的字符来完成。
[img]http://files.jb51.net/file_images/article/201605/201605051039355.png[/img]
[code][456][/code]定义了一组字符,他的意思是匹配4或5或6. [code][][/code]是另一种形式的OR语句。[code][456][/code]是[code][4|5|6][/code]的缩写。匹配范围
[code][1-3][/code] [code]a-z[/code]都是合法的范围
[img]http://files.jb51.net/file_images/article/201605/201605051039356.png[/img]
[b]匹配特殊字符
[/b]
正则表达式语言由特殊含义的特殊字符构成。
[code].[/code] 在正则表达式中表示匹配任何一个字符
比如匹配prod_name中包括[code]on[/code]字符串的行:
[img]http://files.jb51.net/file_images/article/201605/201605051039367.png[/img]
那如何匹配[code].[/code],[code][][/code],[code]|[/code],[code]-[/code]?
为了匹配特殊字符,必须用[code]\\[/code]为前导。 比如[code]\\.[/code]表示查找[code]·[/code]
[b]匹配字符类[/b]
[img]http://files.jb51.net/file_images/article/201605/201605051039368.png[/img]
[b]匹配多个实例[/b]
[img]http://files.jb51.net/file_images/article/201605/201605051039369.png[/img]
[img]http://files.jb51.net/file_images/article/201605/2016050510393710.png[/img]
再比如 [b]匹配连在一起的4位数字[/b]:
[code]sticks?[/code] : [code]s[/code]后的[code]?[/code]使s可选,因为[code]?[/code]匹配它前面紧跟的任何字符的0次或者1次出现。
[img]http://files.jb51.net/file_images/article/201605/2016050510393711.png[/img]
[code][:digit:][/code]匹配任意数字,因而它为数字的一个集合。[code]{4}[/code]确切地要求它前面的字符出现4次。
所以[code][:digit:]{4}[/code]匹配连在一起的任意4位数字。
[img]http://files.jb51.net/file_images/article/201605/2016050510393712.png[/img]
[b]三、定位符[/b]
目前为止所有例子都是匹配一个串中任意为止的文本。为了匹配特定为止的文本,需要使用定位符。
[img]http://files.jb51.net/file_images/article/201605/2016050510393713.png[/img]
[img]http://files.jb51.net/file_images/article/201605/2016050510393814.png[/img]
[b]也可以在不使用数据库的情况下测试正则表达式的正确性:[/b]
SELECT 来测试正则表达式,REGEXP检查总是返回0或1,
SELECT 'HELLO‘ REGEXP '0‘//返回为0
以上就是本文的全部内容,希望对大家的学习有所帮助。