一级标题
#MySQL正则表达式常规使用
- 使用REGEXP关键字
// A code block
SELECT product_sku
From t_product
Where product_sku REGEXP'.000'
// An highlighted block
LIKE和REGEXP区别
LIKE会匹配这个列,而REGEXP会在列值内进行匹配
在MySQL中正则表达式不区分大小写,要区分需使用BINARY关键字,如Where product_sku REGEXP BINARY'Jet.000'
2.匹配范围
[0-9]数字0到9
[a-z]a到z
[A-Z]A到Z
// A code block
SELECT count(1) From t_product Where product_sku REGEXP BINARY '[0-9]'
SELECT count(1) From t_product Where product_sku REGEXP BINARY '[a-z]'
SELECT count(1) From t_product Where product_sku REGEXP BINARY '[A-Z]'
3.进行OR匹配
下面展示一些 内联代码片
。
4. 使用“|”
// A code block
SELECT product_sku
From t_product
Where product_sku REGEXP'1000|2000'
5.匹配几个字符之一
指定一组用[和]扩起来的字
下面展示一些 内联代码片
。
// A code block
SELECT product_sku
From t_product
Where product_sku REGEXP'[123]ton'
6.匹配特殊字符
在特殊字符前加“\”进行转义,注意在一般情况下正则表达式的转义加一个“\”就可以了,在MySQL中需要加两个
select column from table where column regexp ‘\-’ order by column;
这种处理方式就是所谓的转义(escaping),正则表达式内具有特殊意义的所有字符都必须以这种方式转义;
(为了匹配反斜杠{\}字符本身,需要使用\\\)
PS:多数正则表达式实现使用单个反斜杠转义特殊字符,以便能够使用这些字符本身,而MySQL要求两个反斜杠(MySQL自己解释一个,正则表达式库解释一个)
\也用来引用元字符(具有特殊含义的字符),如下:
// A code block
SELECT product_sku
From t_product
Where product_sku REGEXP'\\.000'
7.匹配多个实例
// An highlighted block
SELECT product_sku
From t_product
Where product_sku REGEXP'[0-9]{1,3}'
8.定位符
有时候为了匹配特定位置的文本,需要使用定位符
// A code block
例如:找出一个以一个数(包括小数点开始的数)开始的所有数值,简单搜索[0-9\\.]或([[:digit:]\\.])不行,因为它将在文本内任意位置查找匹配,可以使用^定位符,如下
// An highlighted block
select column from table where column regexp '^[0-9\\.]' order by column;
^匹配串的开始,有两种用法:
①在集合中(用[和]定义),用它来否定该集合
②用来指串的开始处
使regexp和like起相同作用:like匹配整串二regexp匹配子串,可以利用定位符,用^开始每个表达式,用$结束每个表达式,就可以使regexp和like作用一样