《MySql必知必会》读书笔记_用正则表达式进行搜索
9.2、使用MySql正则表达式
正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较。MySql用 WHERE 子句对正则表达式提供了初步的支持。
9.2.1、基本字符匹配
MySql 中的正则表达式匹配不区分大小写。
SELECT prod_name FROM products WHERE prod_name REGEXP '1000' ORDER BY prod_name;
检索列 prod_name 包含文本1000的所有行。
. 是正则表达式语言中一个特殊的字符,表示匹配任意一个字符。
9.2.2、进行 OR 匹配
SELECT prod_name FROM products WHERE prod_name REGEXP '1000 | 2000' ORDER BY prod_name;
| 是正则表达式的 OR 操作符。
9.2.3、匹配几个字符之一
SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton' ORDER BY prod_name;
[123] 匹配 1 或 2 或 3,[^123]匹配 1 或 2 或 3 之外的任何东西。
9.2.4、匹配范围
[0123456789] -> [0-9]
SELECT prod_name FROM products WHERE prod_name REGEXP '[1-5] Ton' ORDER BY prod_name;
9.2.5、匹配特殊字符
\\f -> 换页 \\n -> 换行 \\r -> 回车 \\t -> 制表 \\v -> 纵向制表
SELECT vend_name FROM vendors WHERE vend_name REGEXP '\\.' ORDER BY vend_name;
\\. 匹配 . \\\ 匹配 \
9.2.6、匹配字符类
[:alnum:] -> 任意字母和数字(同[a-zA-Z0-9]) [:alpha:] -> 任意字符(同[a-zA-Z])
[:blank:] -> 空格和制表(同[\\t]) [:digit:] -> 任意数字(同[0-9]) [:lower:] -> 任意小写字母(同[a-z])
[:upper:] -> 任意大写字母(同[A-Z])
9.2.7、匹配多个实例
* -> 0个或多个匹配 + -> 1个或多个匹配(等于{1, }) ? -> 0个或1个匹配(等于{0, 1}) {n} -> 指定数目的匹配
{n, } -> 不少于指定数目的匹配 {n, m} -> 匹配数目的范围(m不超过255)
SELECT prod_name FROM products WHERE prod_name REGEXP '\\([0-9] sticks?\\)' ORDER BY prod_name;
可匹配:TNT (1 stick) TNT (5 sticks)
下式匹配连在一起的4位数字:
SELECT prod_name FROM products WHERE prod_name REGEXP '[[:digit:]]{4}' ORDER BY prod_name;
可匹配:JetPack 1000 JetPack 2000
9.2.8、定位符
^ -> 文本的开始 $ -> 文本的结尾
[[:<:]] 词的开始 [[:>:]] 词的结尾
找出以一个数开始的所有产品:
SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9\\.]' ORDER BY prod_name;
^ 有两种用法:在集合中(用 [ 和 ] 定义),用来否定该集合;否则,用来指串的开始处。

浙公网安备 33010602011771号