记一次hive中的正则表达式使用

先上代码

select userid as cuserid,
                 regexp_extract(trackurl,'\"slot=([^\"]+)\"',1) as tjfrom1,
                 regexp_extract(trackurl,'\"tjfrom=([^\"]+)\"',1) as tjfrom2,
                 regexp_extract(trackurl,'\"infoid=([^\"]+)\"',1) as infoid,
          from xxx.app_action
          where dt = '20200528'
         limit 100;

解析:
语法: regexp_extract(string subject, string pattern, int index)
首先匹配""slot=“匹配其后跟着的以"开头最后再匹配一个”,index=1去第一个括号内的内容即slot=后边的value值返回string,命名为tjfrom1
返回值: string
说明: 将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。
第一参数: 要处理的字段
第二参数: 需要匹配的正则表达式
第三个参数:
0是显示与之匹配的整个字符串
1 是显示第一个括号里面的(默认为1)
2 是显示第二个括号里面的字段…(注意index数量不能大于括号数量)
注意:在有些情况下要使用转义字符双斜杠‘\’

示例:
select regexp_extract(‘x=a3&x=18abc&x=2&y=3&x=4’,‘x=([0-9]+)([a-z]+)’,2) from default.dual;
结果:abc,此处index如果写3则会报错,因为多于括号的数量了。
执行解析:首先匹配"x=",然后比配"0-9","+“代表匹配前面的子表达式一次或多次,最后匹配"a-z” ,"+"代表匹配前面的子表达式一次或多次,输出第二个括号的内容即数字后面跟随的字母.

你可能感兴趣的:(数据库)