Hive中regexp_extract分组提取URL第N段内容问题求助
Hive regexp_extract提取URL指定/分隔段的解决方案
问题根源
- 正则语法错误:你写的
(\/.?\/)里,.?仅匹配0或1个任意字符,无法匹配完整的段落内容,应该用[^\/]*匹配不含/的整段内容。 - 分组逻辑误解:
regexp_extract的第三个参数是捕获分组的索引,不是段落序号,你当前正则只有1个分组,传5完全无效。
正确实现方式
方法1:精准匹配固定位置段落
如果URL结构固定,要提取示例里的text(第6个/分隔段),可以直接按结构拆分分组:
regexp_extract(cs.context_page_url, '^(https?:\/\/)?[^\/]+\/([^\/]+)\/([^\/]+)\/([^\/]+)\/([^\/]+)\/([^\/]+)', 6)
- 细节说明:
^(https?:\/\/)?:兼容带http/https协议头的URL- 每个
([^\/]+)对应一个/分隔的段落,第6个分组就是目标的text
方法2:灵活匹配第N段
如果需要动态提取第N段(比如第k段),用非捕获分组跳过前k-1段:
-- 提取第6段的示例,把{5}改成k-1即可 regexp_extract(cs.context_page_url, '(?:[^\/]+\/){5}([^\/]+)', 1)
- 细节说明:
(?:[^\/]+\/){5}:非捕获分组,匹配并跳过前5个段落+/的组合([^\/]+):捕获目标段落,第三个参数1取这个分组的结果
测试验证
针对你的示例URL:
https://stackoverflow.com/questions/dghahjsg/ahfgajhfg/shjagdhjasg/text/regex-match-all-characters-between-two-strings
用方法2的语句会准确返回text
内容的提问来源于stack exchange,提问作者DBA_player
相关产品推荐
相关产品推荐

