如何使用pig提取URL的第一部分

时间:2016-06-27 23:22:49

标签: regex apache-pig

我有很多长字符串,部分字符串包含url。我想在https之后提取网址的第一部分?在abcd.com之前。有些网址使用http一些使用https;例如:

long string --------&url=http%3a%2f%2fwww.abcd.com%2f------long string
long string --------&url=https%3a%2f%2fmobile.abcd.com%2f------long string
long string --------&url=http%3a%2f%2fmobile.abcd.com%2f------long string
long string --------&url=https%3a%2f%2faccount.abcd.com%2f------long string
long string --------&url=http%3a%2f%2fsale.abcd.com%2f------long string
long string --------&url=https%3a%2f%2flogin.abcd.com%2f------long string

结果将是www,移动,移动,帐户,销售,登录。

到目前为止我尝试过的是

A = LOAD DATA; 
B = FOREACH A GENERATE (chararray)REGEX_EXTRACT(line, '.*&url=https?%3a%2f%2f([^\.]+)\.', 1) AS firstparturl; 
DUMP B; 

它给了我一个错误,抱怨regex_extract''的最后一段时间。

2 个答案:

答案 0 :(得分:1)

(?<=https?%3a%2f%2f)\w+(?=\.\w+\.\w+)

使用正面的lookbehind确保它以

开头

http://

然后抓住那里的任何东西,用先行的方式检查它必须以

结尾

.<word>.<word>

因为它使用了前瞻/后方,所以这些组都没有被捕获,默认捕获组就是你寻求的答案。

答案 1 :(得分:0)

试试这个:

B = FOREACH A GENERATE (chararray)REGEX_EXTRACT(line, '.*&url=https?%3a%2f%2f([^.]+)\\.', 1) AS firstparturl;