数据库——正则表达式
·
MySQL仅支持多数正则表达式实现的一个很小的子集。这里列举MySQL支持的大多数内容!!!
1、基本字符匹配
#相当于like "%14%"
SELECT * FROM sys_dept WHERE ancestors REGEXP "14";
匹配不区分大小写,如果要区分大小写,可使用BINARY字段,即WHERE ancestors REGEXP BINARY “14”;
2、进行OR匹配
SELECT * FROM sys_dept WHERE ancestors REGEXP "14|15|1";
3、匹配几个字符之一
SELECT * FROM sys_dept WHERE ancestors REGEXP "[145]";
这里,[145]定义一组字符,它的意思是匹配1或4或5。
正如所见,[]是另一种形式的OR语句。事实上,正则表达式[145]为[1|4|5]Ton的缩写,也可以使用后者。但是,需要用[ ]来定义OR语句查找什么。
字符集合也可以被否定,即,它们将匹配除指定字符外的任何东西。为否定一个字符集,在集合的开始处放置一个^即可。因此,尽管[123]匹配字符1、2或3,但
[^123]
却匹配除这些字符外的任何东西。
4、匹配范围
集合可用来定义要匹配的一个或多个字符。例如,匹配数字0到9:[0-9]
SELECT * FROM products WHERE pro_dname REGEXP '[1-5]Ton';
5、匹配特殊字符
为了匹配特殊字符,必须用\为前导。\-表示查找-,.表示查找.。
即所谓的转义。
\也用来引用元字符,如下表
| 元字符 | 说明 |
|---|---|
| \\f | 换页 |
| \\n | 换行 |
| \\r | 回车 |
| \\t | 指标 |
| \\v | 纵向制表 |
- 匹配
为了匹配反斜杠()字符本身,需要使用\\。 - \或\
多数正则表达式实现使用单个反斜杠转义特殊字符,以便能使用这些字符本身。但 MySQL要求两个反斜杠(MySQL自己解释一个,正则表达式库解释另一个)。
6、匹配字符类
常用的预定义字符集。
| 类 | 说明 |
|---|---|
| [:alnum:] | 任意字母和数字(同[a-z|A-Z|0-9]) |
| [:alpha:] | 任意字符(同[a-z|A-Z]) |
| [:blank:] | 空格和制表(同[\\t]) |
| [:cntrl:] | ASCII控制字符(ASCII 0到31和127) |
| [:digit:] | 任意数字(同[0-9]) |
| [:graph:] | 与[:print:]相同,但不包括空格 |
| [:lower:] | 任意小写字母(同[a-z]) |
| [:print:] | 任意可打印字符 |
| [:punct:] | 既不在[:almm:]又不在[:cntrl:]中的任意字符 |
| [:space:] | 包括空格在内的任意空白字符(同\\f\\n\\r\\t\\v]) |
| [:upper:] | 任意大写字母(同[A-Z]) |
| [:xdigit:] | 任.意十六进制数字(同[a-fA-F0-9]) |
7、匹配多个实例
可以使用正则表达式重复元字符来完成
| 元字符 | 说明 |
|---|---|
| * | 0个或多个匹配 |
| + | 1个或多个匹配(等于{1,}) |
| ? | 0个或1个匹配 (等于{0,}) |
| {n} | 指定数目的匹配 |
| {n,} | 不少于指定数目的匹配 |
| {n,m} | 匹配数目的范围(m不超过255) |
例如:
REGEEXP '[[:digit:]]{4}'
8、定位符
前面都是匹配一个串中任意位置的文本,使用下面定位符可以匹配特定位置的文本
| 元字符 | 说明 |
|---|---|
| ^ | 文本的开始 |
| $ | 文本的结尾 |
| [[: | 词的开始 |
| [[:>:]] | 词的结尾 |
例如:匹配一个以数字或者小数点开始的数
REGEXP '^[0-9\\.]'
- ^的双重用途
两种用法,否定和串的开始处 - 使REGEXP 起类似like的作用
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)