MySQL使用正则表达式
一、正则与LIK
以前我要查找数据都是使用like后来发现mysql中也有正则表达式了并且感觉性能要好于like,下面我来给大家分享一下mysql REGEXP正则表达式使用详解,希望此方法对大家有帮助。 一、正则与LIKE的区别 Mysql的正则表达式仅仅使SQL语言的一个子集,可以匹配基本的字符、字符串。 正则表达式描述了一组字符串。最简单的正则表达式是不含任何特殊字符的正则表达式。例如,正则表达式hello匹配hello。 例如:select * from wp_posts where post_name REGEXP'hello',可以检索出列post_name中所有包含hello的行 作为一个更为复杂的示例,正则表达式B[an]*s匹配下述字符串中的任何一个:Bananas,Baaaaas,Bs,以及以B开始、以s结束、并在其中包含任意数目a或n字符的任何其他字符串。 REGEXP'.og'.是正则表达式中里一个特殊的字符。它表示匹配一个字符,因此,dog,hog,mog等等都能匹配。 注意: 关于LIKE和REGEXP的区别:LIKE匹配整个列。如果被匹配的文本仅在列值中出现,LIKE并不会找到它,相应的行也不会返回(当然,使用通配符除外)。而REGEXP在列值内进行匹配MySQL 正则表达式,如果被匹配的匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回,这时一个非常重要的差别(当然,如果适应定位符号^和$,可以实现REGEXP匹配整个列而不是列的子集)。 关于大小写的区分:MySQL中正则表达式匹配(从版本3.23.4后)不区分大小写。如果要区分大小写,应该使用BINARY关键字,如where post_name REGEXP BINARY 'Hello.000' 二、基本字符匹配 检索列prod_name 包含文本1000的所有行: 进行OR匹配 相当于:或操作 “|” 匹配几个字符之一 只想匹配特定的字符。 可以通过指定一组用[和]括起来的字符来完成。 [456]定义了一组字符,他的意思是匹配4或5或6.[]是另一种形式的OR语句。[456]是[4|5|6]的缩写。匹配范围 [1-3]a-z都是合法的范围 匹配特殊字符 正则表达式语言由特殊含义的特殊字符构成。 .在正则表达式中表示匹配任何一个字符 比如匹配prod_name中包括on字符串的行: 那如何匹配.,[],|,-? 为了匹配特殊字符,必须用\\为前导。 比如\\.表示查找· 匹配字符类 匹配多个实例 再比如匹配连在一起的4位数字: sticks?:s后的?使s可选,因为?匹配它前面紧跟的任何字符的0次或者1次出现。 [:digit:]匹配任意数字,因而它为数字的一个集合。{4}确切地要求它前面的字符出现4次。 所以[:digit:]{4}匹配连在一起的任意4位数字。 三、定位符 目前为止所有例子都是匹配一个串中任意为止的文本。为了匹配特定为止的文本,需要使用定位符。 也可以在不使用数据库的情况下测试正则表达式的正确性: SELECT 来测试正则表达式,REGEXP检查总是返回0或1, SELECT 'HELLO‘ REGEXP '0‘//返回为0 MySQL数据库中正则表达式的语法,主要包括各种符号的含义。 (^)字符 匹配字符串的开始位置,如“^a”表示以字母a开头的字符串。
查询xxxyyy字符串中是否以xx开头,结果值为1,表示值为true,满足条件。 ($)字符 匹配字符串的结束位置,如“X^”表示以字母X结尾的字符串。 (.)字符 这个字符就是英文下的点,它匹配任何一个字符,包括回车、换行等。 (*)字符 星号匹配0个或多个字符,在它之前必须有内容。如:
这个SQL语句,正则匹配为true。 (+)字符 加号匹配1个或多个字符,在它之前也必须有内容。加号跟星号的用法类似,只是星号允许出现0次,加号则必须至少出现一次。 (?)字符 问号匹配0次或1次。 实例: 现在根据上面的表,可以装置各种不同类型的SQL查询以满足要求。在这里列出一些理解。考虑我们有一个表为person_tbl和有一个字段名为名称: 查询找到所有的名字以'st'开头
查询找到所有的名字以'ok'结尾
查询找到所有的名字包函'mar'的字符串
查询找到所有名称以元音开始和'ok'结束 的
一个正则表达式中的可以使用以下保留字 ^ 所匹配的字符串以后面的字符串开头
$ 所匹配的字符串以前面的字符串结尾
匹配任何字符(包括新行)
a* 匹配任意多个a(包括空串)
a+ 匹配任意多个a(不包括空串)
匹配一个或零个a
de|abc 匹配de或abc
(abc)* 匹配任意多个abc(包括空串)
{1} {2,3} 这是一个更全面的方法,它可以实现前面好几种保留字的功能 a* 可以写成a{0,} a+ 可以写成a{1,} 可以写成a{0,1} 在{}内只有一个整型参数i,表示字符只能出现i次;在{}内有一个整型参数i,后面跟一个“,”,表示字符可以出现i次或i次以上;在{}内只有一个整型参数i,后面跟一个“,”,再跟一个整型参数j,表示字符只能出现i次以上,j次以下(包括i次和j次)。其中的整型参数必须大于等于0,小于等于 RE_DUP_MAX(默认是255)。 如果有两个参数,第二个必须大于等于第一个 [a-dX] 匹配“a”、“b”、“c”、“d”或“X” [^a-dX] 匹配除“a”、“b”、“c”、“d”、“X”以外的任何字符。 “[”、“]”必须成对使用
(编辑:源码网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |