MySQL 正则表达式

正则表达式与MySQL有何关系?正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较。MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定正则表达式,过滤SELECT检索出的数据。

需要注意:MySQL仅支持多数正则表达式实现的一个很小的子集。

基本字符匹配

SELECT * FROM `products` where prod_name REGEXP '1000'; -- JetPack 1000
SELECT * FROM `products` where prod_name REGEXP '.000'; -- JetPack 1000 和 jetPack 2000
-- BINARY 区分大小写
SELECT * FROM `products` where prod_name REGEXP BINARY 'JetPack .000';-- JetPack 1000

进行OR匹配

SELECT * FROM `products` where prod_name REGEXP '1000|2000';-- JetPack 1000 和 jetPack 2000

可以给出两个以上的OR条件。例如,'1000 | 2000 | 3000’将匹配1000或2000或3000。

匹配几个字符之一

如果想匹配多个特定字符之一,可通过指定一组用[和]括起来的字符来完成

SELECT * FROM `products` where prod_name REGEXP '[123] Ton';-- 1 ton anvil 和 2 ton anvil

字符集合也可以被否定,即,它们将匹配除指定字符外的任何东西。为否定一个字符集,在集合的开始处放置一个^即可。因此,[123]匹配字符1、2或3,[^123]匹配除这些字符外的任何东西。

匹配范围

集合可用来定义要匹配的一个或多个字符。例如,下面的集合将匹配数字0到9:[0123456789]

为简化这种类型的集合,可使用-来定义一个范围。下面的式子功能上等同于上述数字列表:[0-9]

范围不限于完整的集合,[1-3]和[6-9]也是合法的范围。此外,范围不一定只是数值的,[a-z]匹配任意字母字符。

匹配特殊字符

使用转义匹配特殊字符。包括.、|、[]

SELECT * FROM `products` where prod_name REGEXP '\.'; -- .5 ton anvil

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

或\? 多数正则表达式实现使用单个反斜杠转义特殊字符,以便能使用这些字符本身。但MySQL要求两个反斜杠(MySQL自己解释一个,正则表达式库解释另一个)。

匹配字符类

可以使用预定义的字符集,称为字符类

匹配多个实例

SELECT * FROM `products` where prod_name REGEXP '\([0-9] sticks?\)';-- TNT (1 stick) 和 TNT (5 sticks)
SELECT * FROM `products` where prod_name REGEXP '[[:digit:]]{4}';-- JetPack 1000 和 jetPack 2000

定位符

SELECT * FROM `products` where prod_name REGEXP '^[0-9\.]';-- .5 ton anvil 和 1 ton anvil 和 2 ton anvil

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

LIKE和REGEXP的不同在于,LIKE匹配整个串而REGEXP匹配子串。利用定位符,通过用^开始每个表达式,用$结束每个表达式,可以使REGEXP的作用与LIKE一样。

文章来源:MySQL必知必会-第9章 用正则表达式进行搜索

原文地址:https://www.cnblogs.com/ooo0/p/14189871.html