1. sql中的正则表达式概述
SQL中可以使用like %进行模糊匹配。
在一些稍复杂的查询场景中,sql也支持正则表达式的匹配,Mysql中使用REGEXP
操作符进行正则表达式的匹配。
- 正则模式
分类 | 正则模式 | 描述说明 |
---|---|---|
定位元字符 | ^ | 匹配开头 |
$ | 匹配结尾 | |
表达式的替换匹配和分组 | . | 匹配除 “\n” 之外的任何单个字符 |
[.\n] | 匹配任意单个字符 | |
[abc] | 匹配所包含的字符集合中的任意单个字符 | |
[^abc] | 匹配所包含的字符集合之外的任意单个字符 | |
(a | b | |
( ) | 标记一个子表达式的开始和结束位置。 | |
量词或重复操作符 | * | 匹配前面的子表达式零次或多次 |
? | 匹配 0 次或 1 次 | |
+ | 匹配前面的子表达式一次或多次 | |
{n} | n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 | |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次最多匹配 m 次 | |
预定义的 POSIX 字符类 | [:alpha:] | 任何字母。 |
[:digit:] | 任何数字。 | |
[:alnum:] | 任何字母和数字。 | |
[:space:] | 任何白字符。 | |
[:upper:] | 任何大写字母。 | |
[:lower:] | 任何小写字母。 | |
[:punct:] | 任何标点符号。 | |
[:xdigit:] | 任何16进制的数字,相当于[0-9a-fA-F]。 |
2. 操作符运算优先级
各种操作符的运算优先级
\转义符
(), (??, (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和顺序
|
3. 各类正则表达式函数
3.1 ORACLE中的支持正则表达式的函数主要有下面四个:
- REGEXP_LIKE(匹配)
- REGEXP_INSTR (包含)
- REGEXP_REPLACE(替换)
- REGEXP_SUBSTR(提取)
例子:
SELECT * from byh_user
where REGEXP_LIKE(mobile, '^[1]{1}[345]{1}[[:digit:]]{9}$')
3.2 Hive正则匹配函数
- (1)regexp_extract
语法: regexp_extract(string subject, string pattern, int index)
返回值: string
说明: 将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。
第一参数: 要处理的字段
第二参数: 需要匹配的正则表达式
第三个参数:
0是显示与之匹配的整个字符串
1 是显示第一个括号里面的
2 是显示第二个括号里面的字段…
例子:
select
regexp_extract('x=a3&x=18abc&x=2&y=3&x=4','x=([0-9]+)([a-z]+)',0), -- x=18abc
regexp_extract('x=a3&x=18abc&x=2&y=3&x=4','^x=([a-z]+)([0-9]+)',0) -- x=a3
- (2)regexp_replace
例子:
regexp_replace(mobile,’[^0-9]’,’’)