MySql 使用正则表达式

MySql 用where 子句对正则表达式提供了支持,允许你指定正则表达式,注意mysql仅支持多数正则表达式实现的一个很小的子集。

1.基本字符匹配:

SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000';

mysql 中正则表达式匹配不区分大小写,为区分大小写,可使用BINARY 关键字,如:

WHERE prod_name REGEXP BINARY 'JetPak .000'

2. OR 匹配

WHERE prod_name REGEXP '1000|2000';

| 为正则表达式的OR操作符。它表示匹配基中之一。多个OR条件可以并入单个正则表达式,例如:'1000|2000|3000' 将匹配1000或2000或3000.

3.匹配几个字符之一

WHERE prod_name REGEXP '[123] Ton'

[123] 定义一组字符,它的意思是匹配1或2或3。[]是另一种形式的OR语句,事实上,正则表达式[123]Ton 为[1|2|3]Ton 的缩写。

为否定一个字符集,在集合的开始处放置一个^即可,因此[^123]匹配除1,2,3字符之外的任何东西。

4.匹配范围

可使用 - 来定义一个范围,如[0-9] 表示匹配0到9之间的任一个数字。范围不限于完整的集合,[1-3]和[6-9]也是合法的范围。此外,范围不一定只是数值的,[a-z]匹配任意一个字母字符。

WHERE prod_name REGEXP '[1-5] Ton'

5.匹配特殊字符

为了匹配特殊字符,必须用\\为前导进行转义,\\- 表示查找-,\\. 表示查找. 。

WHERE vend_name REGEXP '\\.'

为了匹配反斜杠(\)字符本身,需要使用\\\

6.定位符

为了匹配特定位置的文本可以使用如下定位符:

元字符 说明
^ 文本的开始
$ 文本的结尾
   
   

例如,你想找出以一个数(包括以小数点开始的数)开始的所有产品:

WHERE prod_name REGEXP '^[0-9\\.]'

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

7.重复元字符

. 匹配任意一个字符
* 匹配0个或多个字符
+ 匹配1个或多个字符(等于{1,}
? 匹配0个或1个字符(等于{0,1}
{n} 指定数目的匹配
{n,} 不少于指定数据的匹配
{n,m} 匹配数目的范围(m不超过255)

 

WHERE prod_name REGEXP '\\([0-9] sticks?\\)'

\\( 匹配字符(,[0-9]匹配任意一个数字,sticks? 匹配stick和sticks (s 后的?使s可选),\\) 匹配字符)。

8.简单的正则表达式测试

可以在不使用数据库表的情况下用SELECT来测试正则表达式。REGEXP 在匹配成功时总是返回1,匹配不成功时返回0,可以用带文字串的REGEXP来测试表达式,并试验它们。相应的语法如下:

SELECT 'hello' REGEXP '[0-9]';
这个例子显示将返回0(因为文本hello中没有数字)。
posted @ 2013-12-07 15:14  code_flyer  阅读(288)  评论(0编辑  收藏  举报