您好我正在尝试使用Hive从日志中解析大型URL。
我想从URL中提取一个特定的值(策略= ??),这些值可以连字,但并非总是如此。
我构建了这个示例查询,但它只返回任何内容。
我做错了什么?
select regexp_extract('234=23234&werw=asdf&strategy=retargeting&asdf=fds23', '(strategy=)([-\w*]*)',2) from vt;
所以我期望获得的价值是从这个部分网址字符串重新定位。 234 = 23234&安培; werw = ASDF&安培;策略= 重新定位&安培; ASDF = fds23
非常感谢任何帮助!!!
答案 0 :(得分:0)
我相信这个正则表达式适合你:
strategy=((\w-?)+)
以下是RegExr链接:http://regexr.com?35sbl。匹配后,组1包含strategy
的值。请注意,此正则表达式将匹配值中的任意数量的连字符。如果连字符是第一个字符,它也会失败(但在我看来,前导连字符不会使值'连字')。
据我所知,由于第2组的设置方式,你的方法没有返回任何内容:你有[-\w*]
,表示“匹配连字符,然后是任意数量的字母数字字符(包括0) )”。您也可以将其重写为[-?\w*]*
,其中“匹配或不匹配连字符,然后是任意数量的字母数字字符(包括0)”。但是,这将匹配只是连字符,如本例所示
strategy=-
我想,这不是你想要的东西。一种稍微更安全的方法可能是将组2设置为[-?\w+]+
,这将在等号后至少需要一个\w
个字符。快乐的编码! :)