您的位置:首页 > 数据库 > MySQL

MySql 使用正则表达式

2013-12-07 15:14 253 查看
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中没有数字)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: