regexp_extract:
regexp_extract(str, regexp[, idx])
str是被解析的字符串或字段名
regexp 是正则表达式
idx是返回结果 取表达式的哪一部分 默认值为1
0表示把整个正则表达式对应的结果全部返回
1表示返回正则表达式中第一个() 对应的结果 以此类推
例:
mysql中特殊字符进行匹配时需要两个转义字符,例如下面例子中的中括号
为了匹配
“{“native”:{“assets”:[{“id”:1,“required”:1,“title”:{“len”:35}},{“data”:{“len”:18,“type”:1},“id”:2,“required”:1},{“commonNt”:{“contentTypes”:[1,2,3,4],“formatTypes”:[45,1060]},“id”:9,“required”:1}],“ver”:“1.1”}}”
中的"formatTypes"字段,SQL语句为:
regexp_extract(get_json_object(t1.raw_body,'$.imp[0].native.request'),'"formatTypes":\\[(.*?)\\]',1) as formatTypes
这里输出的结果为:
45,1060
当语句为:
regexp_extract(get_json_object(t1.raw_body,'$.imp[0].native.request'),'("formatTypes":)(\\[(.*?)\\])',2) as formatTypes_2
输出结果为:
[45,1060]
总结: regexp_extract函数的idx只会与()挂钩,在例子1中()括住的是中括号里面的数字,也就是45,1060,因此idx最大为1,;但在例子2中是将匹配内容分为了两部分,都用括号括起来了,因此idx最大为2,当idx为2时输出的是小括号内的部分,也就是[45,1060]。