0

您好我正在尝试使用 Hive 从日志中解析大 URL。

我想从 URL (strategy=??) 中提取一个特定的值,这些值可以连字符,但并非总是如此。

我构建了这个示例查询,但它什么也没返回。

我究竟做错了什么?

select regexp_extract('234=23234&werw=asdf&strategy=retargeting&asdf=fds23', '(strategy=)([-\w*]*)',2) from vt;

所以我期望得到的值是从这个部分 URL 字符串重新定位。234=23234&werw=asdf&strategy=重定向&asdf=fds23

任何帮助是极大的赞赏!!!

4

1 回答 1

0

我相信这个正则表达式会为你工作:

strategy=((\w-?)+)

这是一个 RegExr 链接:http ://regexr.com?35sbl 。匹配后,组 1 包含 的值strategy。请注意,此正则表达式将匹配值中任意数量的连字符。如果连字符是第一个字符,它也会失败(尽管在我看来,前导连字符不会使值“连字符”)。

据我所知,由于组 2 的设置方式,您的方法没有返回任何内容:您有[-\w*],它表示“匹配连字符,然后匹配任意数量的字母数字字符(包括 0)”。您也可以将其重写为[-?\w*]*,表示“匹配或不匹配连字符,然后是任意数量的字母数字字符(包括 0)”。但是,这将匹配一个连字符,如本例所示

strategy=-

这不是你想要的,我想。一种更安全的方法可能是将组 2 设置为,这将需要在等号后[-?\w+]+至少有一个字符。\w快乐编码!:)

于 2013-08-07T22:31:04.953 回答