《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;

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

posted @ 2018-04-03 22:16  bubu_12  阅读(59)  评论(0)    收藏  举报