MySQL必知必会-8MySQL正则表达式

REGEXP后跟的东西作为正则表达式处理。

 
   
  1. SELECT
  2. prod_name
  3. FROM
  4. products
  5. WHERE
  6. prod_name REGEXP '1000'
  7. ORDER BY
  8. prod_name;

LIKE与REGEXP不同的地方,LIKE匹配整个列(除非使用通配符),REGEXP在列内匹配,例如:
列值为 hello 2017
LIKE ‘2017’   //不能匹配
LIKE '%2017' //能够匹配
REGEXP ‘2017’ //能够匹配

REGEXP也能够匹配整个列,与LIKE相同的作用,使用^和$即可。^是指开始处,$是指结束处,如果是在[]里^是指匹配之外的任何东西,[^123] 却匹配除这些字符外的任何东西。

MySQL中正则表达式(自版本3.23.4后)不区分大小写(即,大写和小写都匹配)。为区分大小写,可使用BINARY关键字,如
 
    
  1. SELECT
  2. products.prod_name
  3. FROM
  4. products
  5. WHERE
  6. prod_name REGEXP BINARY 'JetPack .000';

进行OR匹配
为搜索两个串之一(或者为这个串,或者为另一个串),使用 |
 
    
  1. SELECT
  2. products.prod_name
  3. FROM
  4. products
  5. WHERE
  6. prod_name REGEXP '1000|2000'
多个OR条件,可以给出多个|,例如
 
    
  1. SELECT
  2. products.prod_name
  3. FROM
  4. products
  5. WHERE
  6. prod_name REGEXP '1000|2000|5';

匹配几个字符之一
通过指定一组用[和]括起来的字符来完成。
 
    
  1. SELECT
  2. prod_name
  3. FROM
  4. products
  5. WHERE
  6. prod_name REGEXP '[123] Ton'
  7. ORDER BY
  8. prod_name;
[123] 定义一组字符,它的意思是匹配1或2或3,因此1 ton和2 ton都匹配且返回。
[]是另外一种OR语句,正则表达式[123]Ton为[1|2|3]Ton的缩写

匹配范围
集合可用来定义要匹配的一个或多个字符。下面所列都是合法的。
[0-9] 
[1-3]
[6-9] 
[a-z]
 
    
  1. SELECT
  2. products.prod_name
  3. FROM
  4. products
  5. WHERE
  6. prod_name REGEXP '[1-5] Ton';

匹配特殊字符
为了匹配特殊字符必须\\作为前导,这种处理也叫转义,例如
\\-表示查找-
\\.表示查找.
\\\ 表示查找\
 
    
  1. SELECT
  2. vendors.vend_name
  3. FROM
  4. vendors
  5. WHERE
  6. vend_name REGEXP '\\.'
  7. ORDER BY
  8. vend_name;
\\也用来引用元字符(具有特殊含义的字符)
\\f     换页
\\n    换行
\\r     回车
\\t     制表
\\v    纵向制表

转移字符需要两个反斜杠(MySQL自己解释一个,正则表达式解释另一个 )

匹配多个实例
*    0个或多个匹配
+    1个或多个匹配(等于{1,})
?    0个或1个匹配
{n}    指定书目的匹配
{n,}   不少于指定数目的匹配
{n,m}   匹配数目的范围(m不超过255)
 
    
  1. SELECT
  2. prod_name
  3. FROM
  4. products
  5. WHERE
  6. prod_name REGEXP '\\([0-9] sticks?\\)';
\\([0-9] sticks?\\)  解释为 \\(  匹配(,[0-9]匹配任意数字,sticks?匹配stick和sticks(s后面的?使s可选)

 
    
  1. SELECT
  2. prod_name
  3. FROM
  4. products
  5. WHERE
  6. prod_name REGEXP '[0-9]{4}';
匹配任意4个连在一起的数字。

定位符
^    文本的开始
$    文本的结尾
[[:<:]]   词的开始
[[:>]]]   词的结尾

 
     
  1. SELECT
  2. prod_name
  3. FROM
  4. products
  5. WHERE
  6. prod_name REGEXP '^[0-9\\.]';
^匹配串的开始,只在.或任意数字为串中第一个字符时才匹配它们.

^有两种用法,在集合中(用[和]定义),用它来否定该集合,否则,用来指串的开始处。

为了让REGEXP与LIKE具有相同的作用,需要使用^表示开始处,$表示结束处。

简单的正则表达式测试
 
     
  1. SELECT 'hello' REGEXP '0-9';
这个例子显然返回0

你可能感兴趣的:(MySQL)