MySQL 模式匹配
LIKE 模式
利用 LIKE 运算符以及通配符 "%"(能匹配任意字符序列) 和 "_"(只能匹配单个字符) 实现的
通配符 "%" 能匹配任何字符串, 包括空字符串, 但是不能匹配 NULL
如果 LIKE 的一边为二进制串, 则两边都当成二进制串比较, 如果都不是二进制串, 则根据它们的排序规则来进行比较
正则表达式 REGEXP
利用 REGEXP 运算符和正则表达式实现的
点号字符 "." 可以匹配任何单个字符, 如:
'abc' REGEXP 'a.c'
方括号 "[...]" 可以匹配列在方括号内部的任何字符, 如:
'e' REGEXP '[aeiou]'
连接符 "-" 可用于指定字符范围, 其两端分别为范围的起始和结束字符 "^" 用于把这个字符范围的含义变反 (匹配未列在其中的字符), 如:
- 'abc' REGEXP '[a-z]'
- 'abc' REGEXP '[^d-z]'
"*" 表示匹配前面的子表达式零次或多次, 如:
- 'abcdef' REGEXP 'a.*f'
- 'xxxxx' REGEXP 'x*'
'abc' REGEXP '[0-9]*abc' 因为任意个包括 0 个
如果要匹配前面的子表达式一次或多次, 则需要使用 "+" 来代替 "*", 如:
'abc' REGEXP 'cd*' -- 可以匹配零次
'abc' REGEXP 'cd+' 错误 -- 不可以匹配零次, 至少匹配一次
'abcd' REGEXP 'cd+'
"^pattern" & "pattern$" 模式, 当 pattern 出现在字符串的开头或结尾时, 匹配成功, 而 "^pattern$" 只有匹配整个 pattern 才能匹配成功, 如:
- 'abc' REGEXP 'b'
- 'abc' REGEXP '^abc
两者之间差异
除了使用运算符不同之外, 两个重要的差异:
SQL 的 LIKE 模式只用于匹配整个字符串; 正则表达式 REGEXP 可以匹配字符串的任何部分
LIKE 运算符是多字节安全的 REGEXP 运算符只能正确地处理单字节字符集, 并不会考虑排序规则
两者之间差异
除了使用运算符不同之外, 两个重要的差异:
SQL 的 LIKE 模式只用于匹配整个字符串; 正则表达式 REGEXP 可以匹配字符串的任何部分
LIKE 运算符是多字节安全的 REGEXP 运算符只能正确地处理单字节字符集, 并不会考虑排序规则
两者之间差异
除了使用运算符不同之外, 两个重要的差异:
SQL 的 LIKE 模式只用于匹配整个字符串; 正则表达式 REGEXP 可以匹配字符串的任何部分
LIKE 运算符是多字节安全的 REGEXP 运算符只能正确地处理单字节字符集, 并不会考虑排序规则
来源: http://www.jianshu.com/p/a3142e37641c