欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MYSQL使用正则表达式过滤数据

程序员文章站 2024-02-16 22:21:52
一、正则与like的区别  mysql的正则表达式仅仅使sql语言的一个子集,可以匹配基本的字符、字符串。 例如:select * from wp_posts...

一、正则与like的区别
 mysql的正则表达式仅仅使sql语言的一个子集,可以匹配基本的字符、字符串。
例如:select * from wp_posts where post_name regexp'hello',可以检索出列post_name中所有包含hello的行

regexp'.og' .是正则表达式中里一个特殊的字符。它表示匹配一个字符,因此,dog,hog,mog等等都能匹配。

注意:

关于like和regexp的区别:like匹配整个列。如果被匹配的文本仅在列值中出现,like并不会找到它,相应的行也不会返回(当然,使用通配符除外)。而regexp在列值内进行匹配,如果被匹配的匹配的文本在列值中出现,regexp将会找到它,相应的行将被返回,这时一个非常重要的差别(当然,如果适应定位符号^和$,可以实现regexp匹配整个列而不是列的子集)。

关于大小写的区分:mysql中正则表达式匹配(从版本3.23.4后)不区分大小写。如果要区分大小写,应该使用binary关键字,如where post_name regexp binary 'hello.000'

二、基本字符匹配
检索列prod_name 包含文本1000的所有行:

MYSQL使用正则表达式过滤数据

进行or匹配
相当于:或操作 “|”

MYSQL使用正则表达式过滤数据

匹配几个字符之一
只想匹配特定的字符。 可以通过指定一组用[]括起来的字符来完成。

MYSQL使用正则表达式过滤数据

[456]定义了一组字符,他的意思是匹配4或5或6. []是另一种形式的or语句。[456][4|5|6]的缩写。匹配范围
[1-3] a-z都是合法的范围

MYSQL使用正则表达式过滤数据

匹配特殊字符

正则表达式语言由特殊含义的特殊字符构成。

. 在正则表达式中表示匹配任何一个字符

比如匹配prod_name中包括on字符串的行:

MYSQL使用正则表达式过滤数据

那如何匹配.,[],|,-

为了匹配特殊字符,必须用\\为前导。 比如\\.表示查找·

匹配字符类

MYSQL使用正则表达式过滤数据

匹配多个实例

MYSQL使用正则表达式过滤数据

MYSQL使用正则表达式过滤数据

再比如 匹配连在一起的4位数字

sticks? : s后的使s可选,因为匹配它前面紧跟的任何字符的0次或者1次出现。

MYSQL使用正则表达式过滤数据

[:digit:]匹配任意数字,因而它为数字的一个集合。{4}确切地要求它前面的字符出现4次。
所以[:digit:]{4}匹配连在一起的任意4位数字。

MYSQL使用正则表达式过滤数据

三、定位符
目前为止所有例子都是匹配一个串中任意为止的文本。为了匹配特定为止的文本,需要使用定位符。

MYSQL使用正则表达式过滤数据

MYSQL使用正则表达式过滤数据

也可以在不使用数据库的情况下测试正则表达式的正确性:

select 来测试正则表达式,regexp检查总是返回0或1,

select  'hello‘  regexp '0‘//返回为0

以上就是本文的全部内容,希望对大家的学习有所帮助。