MySQL字段匹配LIKE和正则表达式 补充《MySQL必知必会》8、9章

like 匹配/模糊匹配

关键字:LIKE(NOT LIKE)
表达式:WHERE 字段名 LIKE 匹配子句(字符串)

%:表示任意 0 个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句。

'%a'     //以a结尾的数据
'a%'     //以a开头的数据
'%a%'    //含有a的数据
'_a_'    //三位且中间字母是a的
'_a'     //两位且结尾字母是a的
'a_'     //两位且开头字母是a的

正则表达式匹配

关键字:REGEXP(NOT REGEXP)
表达式:WHERE 字段名 REGEXP 匹配子句(字符串)

选项 说明 例子 匹配值示例
^ 匹配文本的开始字符 ‘^b’ 匹配以字母 b 开头 的字符串 book、big、banana、 bike
$ 匹配文本的结束字符 'st$’ 匹配以 st 结尾的字 符串 test、resist、persist
. 匹配任何一个字符 'b.t’ 匹配任何 b 和 t 之间有一个字符 bit、bat、but、bite
? 匹配任何零个或一个字符 'ba?t’ 匹配任何 b 和 t 之间有零个或一个a字符 bt、bat
* 匹配零个或多个在它前面的字符 'f*n’ 匹配字符 n 前面有 任意个字符 f fn、fan、faan、abcn
+ 匹配一个或多个在它前面的字符 'ba+’ 匹配以 b 开头,后面至少紧跟一个 a ba、bay、bare、battle
字符串 匹配包含指定字符的文本 'fa’ fan、afa、faad
[字符串] 匹配字符串中的任何一个字符 '[xz]'匹配 x 或者 z dizzy、zebra、x-ray、 extra
[^字符串] 匹配不在括号中的任何字符 '[^abc]’ 匹配任何不包 含 a、b 或 c 的字符串 desk、fox、f8ke
字符串{n} 匹配前面的字符串 n 次 b{2} 匹配 2 个 bb、abb
字符串{n,} 匹配前面的字符串至少 n 次 b{2,} 匹配 2 个或更多 的 b bbb、 bbbb、 bbbbbbb
字符串{,m} 匹配前面的字符串至少0次,至多 m 次 b{2,} 匹配 2 个或更多 的 b bbb、 bbbb、 bbbbbbb
字符串{n,m} 匹配前面的字符串至少 n 次, 至多 m 次 b{2,4} 匹配最少 2 个, 最多 4 个 b bbb、 bbbb
| ‘^[aeiou] | ok$’ 匹配以元音字符开头以’ok’字符串结尾 aaa、bok
(…) 把多个字符作为一个整体去匹配 '(do)*'匹配0个多或多个do dodox、dododo

注:

  1. [ ]匹配集合“[123]”也可以写成“[1-3]” ,即指定集合区间。
    例如,“[a-z]”表示集合区间为a-z的字母,“[0-9]”表示集合区间为所有数字,“[a-z0-9]”表示集合区间为a-z的字母和0-9的数字
  2. 特别要注意最后的()的命令,如果不使用()那么所有的都是指单个字符去做匹配,如果需要使用多个字符作为一个整体去匹配,就需要将多个字符使用()给括起来
  3. 在MySQL中正则表达式不区分大小写,要区分需使用BINARY关键字,
    SELECT ‘dxx’ REGEXP ‘Dx’ 结果为 1(TRUE),SELECT ‘dxx’ REGEXP BINARY ‘Dx’ 结果为0
  4. ?的用法:
    1.几个常用的非贪婪匹配Pattern
    *? 重复任意次,但尽可能少重复
    +? 重复1次或更多次,但尽可能少重复
    ?? 重复0次或1次,但尽可能少重复
    {n,m}? 重复n到m次,但尽可能少重复
    {n,}? 重复n次以上,但尽可能少重复
    2.(好像不是mysql的,报错)
    ?=exp,要匹配的内容的后面是exp
    ?<=exp ,要匹配的内容的前面是exp
    ?!exp,要匹配的内容的后面不是exp
    ? ?exp,匹配exp,并捕获文本到名称为name的组里,也可以写成(?’name’exp)
    ?:exp,匹配exp,不捕获匹配的文本,也不给此分组分配组号

匹配字符类(Posix字符类)

使用的时候需要外面加一层[],例如[[:digit:]]

说明
[:alnum:] 任意字母和数字(同[a-zA-Z0-9],汉字也会被匹配)
[:alpha:] 任意字母(同[a-zA-Z],汉字也会被匹配)
[:blank:] 空格和制表(同[\t])
[:cntrl:] ASCII控制字符(ASCII0到31和127)
[:digit:] 任意数字(同[0-9]) 以小数点开始的数:[0-9\.](或[[:digit:]\.])
[:graph:] 和[[:print:]]相同,但不包含空格
[:lower:] 任意小写字母(同[a-z],汉字也会被匹配)
[:print:] 任意可打印字符
[:punct:] 即不在[[:alnum:]]又不在[[:cntrl:]]中的字符
[:space:] 包括空格在内的任意空白字符(同[\f\n\r\t\v])
[:upper:] 任意大写字母(同[A-Z],汉字也会被匹配)
[:xdigit:] 任意16进制数字(同[a-fA-F0-9])
[:<:] 词的开始
[:>:] 词的结尾

例:SELECT ‘dx’ REGEXP ‘[[:alnum:]]’ 输出为 1(TRUE)

你可能感兴趣的:(MySQL)