参考原文链接:https://blog.csdn.net/jv_rookie/article/details/55211955
1. 正则表达式的符号及意义
| 符号 | 释义 |
|---|---|
| / | 做为转意,即通常在”/“后面的字符不按原来意义解释,如/b/匹配字符”b”,当b前面加了反斜杆后//b/,转意为匹配一个单词的边界。 -或- 对正则表达式功能字符的还原,如”“匹配它前面元字符0次或多次,/a/将匹配a,aa,aaa,加了”/“后,/a//将只匹配”a“。 |
| ^ | 匹配一个输入或一行的开头,/^a/匹配”an A”,而不匹配”An a” |
| $ | 匹配一个输入或一行的结尾,/a$/匹配”An a”,而不匹配”an A” |
| * | 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa |
| + | 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa |
| ? | 匹配前面元字符0次或1次,/ba*/将匹配b,ba |
| (x) | 匹配x保存x在名为$1…$9的变量中 |
| x|y | 匹配x或y |
| {n} | 精确匹配n次 |
| {n,} | 匹配n次以上 |
| {n,m} | 匹配n-m次 |
| [xyz] | 字符集(character set),匹配这个集合中的任一一个字符(或元字符) |
| [^xyz] | 不匹配这个集合中的任何一个字符 |
| [/b] | 匹配一个退格符 |
| /b | 匹配一个单词的边界 |
| /B | 匹配一个单词的非边界 |
- ‘( )’ 标记一个子表达式的开始和结束位置。
- ‘[]’ 标记一个中括号表达式。
- /num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。
字符簇:
- [[:alpha:]] 任何字母。
- [[:digit:]] 任何数字。
- [[:alnum:]] 任何字母和数字。
- [[:space:]] 任何白字符。
- [[:upper:]] 任何大写字母。
- [[:lower:]] 任何小写字母。
- [[:punct:]] 任何标点符号。
- [[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]
- [[:<:]],[[:>:]] 标记表示word边界。它们分别与word的开始和结束匹配。word是一系列字字符,其前面和后面均没有字字符。字字符是alnum类中的字母数字字符或下划线(_)
2. regexp_extract函数
字符串正则表达式解析函数:regexp_extract(str, regexp[, idx])
参数解释:
- str是被解析的字符串或字段名
- regexp 是正则表达式
- idx是返回结果取表达式的哪一部分 默认值为1。
- 0表示把整个正则表达式对应的结果全部返回
- 1表示返回正则表达式中第一个() 对应的结果以此类推
注意点:
要注意的是idx的数字不能大于表达式中()的个数,否则报错。
实例:
- select regexp_extract(‘hitdecisiondlist’,’(i)(.*?)(e)’,0) ;
得到的结果为——itde
- select regexp_extract(‘hitdecisiondlist’,’(i)(.*?)(e)’,1) ;
得到的结果为——i
- select regexp_extract(‘hitdecisiondlist’,’(i)(.*?)(e)’,2) ;
得到的结果为——td
- select regexp_extract(‘x=a3&x=18abc&x=2&y=3&x=4’,’x=([0-9]+)([a-z]+)’,2) from default.dual;
得到的结果为——abc
