mysql用正则表达式定位符_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 正则表达式_第1张图片

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

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

匹配字符类

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

mysql用正则表达式定位符_MySQL 正则表达式_第2张图片

匹配多个实例

mysql用正则表达式定位符_MySQL 正则表达式_第3张图片

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

定位符

mysql用正则表达式定位符_MySQL 正则表达式_第4张图片

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章 用正则表达式进行搜索

你可能感兴趣的:(mysql用正则表达式定位符)