9.1 正则表达式介绍
正则表达式是用来匹配文本的特殊的串(字符集合)
9.2 使用MySQL正则表达式
正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较。。MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定正则表达式,过滤SELECT检索出的数据。
9.2.1 基本字符匹配
| 12
 3
 4
 
 | SELECT prod_id, prod_nameFROM products
 WHERE prod_name REGEXP '1000'
 ORDER BY prod_name;
 
 | 
9.2.2 进行OR匹配
为搜索两个串之一(或者为这个串,或者为另一个串),使用|;
|为正则表达式的OR操作符;
使用|从功能上类似于在SELECT语句中使用OR语句,多个OR条件可并入单个正则表达式。
- 检索列prod_name包含1000或2000的所有行
| 12
 3
 4
 
 | SELECT prod_id, prod_nameFROM products
 WHERE prod_name REGEXP '1000|2000'
 ORDER BY prod_name;
 
 | 
9.2.3 匹配几个字符之一
可通过指定一组用[和]括起来的字符来完成匹配特定的字符
- []是另一种形式的OR语句。正则表达式[123] Ton为[1|2|3] Ton的缩写,也可以使用后者
| 12
 3
 4
 
 | SELECT prod_id, prod_nameFROM products
 WHERE prod_name REGEXP '[123] ton'
 ORDER BY prod_name;
 
 | 
| prod_id | prod_name | 
| ANV02 | 1 ton anvil | 
| ANV03 | 2 ton anvil | 
| 12
 3
 4
 
 | SELECT prod_nameFROM products
 WHERE prod_name REGEXP '1|2|3 ton'
 ORDER BY prod_name;
 
 | 
| prod_name | 
| 1 ton anvil | 
| 2 ton anvil | 
| JetPack 1000 | 
| JetPack 2000 | 
| TNT (1 stick) | 
- 字符集合也可以被否定,即,它们将匹配除指定字符外的任何东西。为否定一个字符集,在集合的开始处放置一个^即可。[^123]却匹配除这些字符外的任何东西。
9.2.4 匹配范围
集合可用来定义要匹配的一个或多个字符。
下面的集合将匹配数字0到9:[0123456789],等同于[0-9];[a-z]匹配任意字母字符。
| 12
 3
 4
 
 | SELECT prod_nameFROM products
 WHERE prod_name REGEXP '[1-5] ton'
 ORDER BY prod_name;
 
 | 
9.2.5 匹配特殊字符
正则表达式语言由具有特定含义的特殊字符构成。匹配这些字符.,[],|和-应该怎么办
为了匹配特殊字符,必须用\为前导。\-表示查找-,\.表示查找.
正则表达式内具有特殊意义的所有字符都必须以这种方式转义。这包括.、|、[]以及迄今为止使用过的其他特殊字符。
| 12
 3
 
 | SELECT vend_nameFROM vendors
 WHERE vend_name REGEXP '.';
 
 | 
| vend_name | 
| Anvils R Us | 
| LT Supplies | 
| ACME | 
| Furball Inc. | 
| Jet Set | 
| Jouets Et Ours | 
| 12
 3
 
 | SELECT vend_nameFROM vendors
 WHERE vend_name REGEXP '\\.';
 
 | 
| vend_name | 
| Furball Inc. | 
| #### 9.2.6 匹配字符类 | 
预定义的字符集,称为字符类(character class)。(见MySQL必知必会p58)
9.2.7 匹配多个实例
| 元字符 | 说明 | 
| * | 0个或多个匹配 | 
| + | 1个或多个匹配(等于{1,}) | 
| ? | 0个或1个匹配(等于{0,1}) | 
| {n} | 指定数目的匹配 | 
| {n,} | 不少于指定数目的匹配 | 
| {n,m} | 匹配数目的范围(m不超过255) | 
- [0-9]匹配任意数字(这个例子中为1和5),sticks?匹配stick和sticks(s后的?使s可选,因为?匹配它前面的任何字符的0次或1次出现),\)匹配)。
| 12
 3
 4
 
 | SELECT prod_nameFROM products
 WHERE prod_name REGEXP '\\([1-5] sticks?\\)'
 ORDER BY prod_name;
 
 | 
| prod_name | 
| TNT (1 stick) | 
| TNT (5 sticks) | 
- [:digit:]匹配任意数字,{4}确切地要求它前面的字符(任意数字)出现4次,所以[[:digit:]]{4}匹配连在一起的任意4位数字。
| 12
 3
 4
 
 | SELECT prod_nameFROM products
 WHERE prod_name REGEXP '[[:digit:]]{4}'
 ORDER BY prod_name;
 
 | 
9.2.8 定位符
| 元字符 | 说明 | 
| ^ | 文本的开始 | 
| $ | 文本的结束 | 
| [[:<:]] | 词的开始 | 
| [[:>:]] | 词的结束 | 
- 找出以一个数(包括以小数点开始的数)开始的所有产品
| 12
 3
 4
 
 | SELECT prod_nameFROM products
 WHERE prod_name REGEXP '^[0-9\\.]'
 ORDER BY prod_name;
 
 | 
| prod_name | 
| .5 ton anvil | 
| 1 ton anvil | 
| 2 ton anvil |