原始数据 url
字段保存 RESTful URL 的数据,有下面这几种形式
http://host.name/v2/type/44/things
http://host.name/v2/type/44
http://host.name/v2/type/30d-hot
需要将其中的 44
这种 id 用正则表达式替换掉,同时不能替换掉 v2
、30d
中的数字,最终的 Hive SQL:
SELECT regexp_replace(regexp_replace(url, '\/\\d+\/', '/{id}/'), '\/\\d+$', '/{id}')
FROM db.table;
说明:
- 无法通过
\/\\d+[\/|$]
一次匹配出来,因为正则的[]
中不能写$
,可参考:https://stackoverflow.com/a/32316371/11235455 - 关于转义:
a. 原始正则是:\/\d+
,可参考:https://regex101.com/r/wqqKyA/1
b. Java 转义:\\/\\d+
(正则中的每一个\
都需要用\\
替换),可参考:https://regex101.com/r/wqqKyA/1/codegen?language=java
c. Hive 转义:\/\\d+
😵😵😵