我需要刪除用戶代理字符串的「括號內」部分中的第三個和後續值。Java或Pig正則表達式從UserAgent字符串去除值
爲了得到
的Mozilla/4.0;
從(兼容MSIE 8.0)
的Mozilla/4.0(兼容; MSIE 8.0; Windows NT的6.0;三叉戟/4.0; GTB6; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; WinTSI 06.12.2009; .NET CLR 3.0.30729; .NET4.0C)
我成功地使用sed命令
sed 's/(\([^;]\+; [^;]\+\)[^)]*)/(\1)/'
我需要一個Java正則表達式來得到相同的結果Apache Pig。 任何人都可以幫助我將上面的sed正則表達式重新寫入Java?
喜歡的東西:
new = FOREACH userAgent GENERATE FLATTEN(EXTRACT(userAgent, 'JAVA REGEX?') as (term:chararray);
謝謝。但我無法得到這個'user_agent = FOREACH logs_filtered5 GENERATE FLATTEN(EXTRACT(userAgent,'\(([^;] +; [^;] +)[^)] * \)'))as(user_agent) ; '工作,我在分析過程中總是收到ERROR 1000:錯誤。遇到:「(」(40),after:「\'\\」。也許這是PIG專用的東西。 – Martin
也許它希望反斜槓能夠被轉義,就像在Java字符串中一樣。試試''\\(([^;] +; [^;] +)[^)] * \\'' –
我也試過了,但沒有幫助'ERROR org.apache.pig.tools .grunt.Grunt - 解析過程中出錯1000:錯誤。詞彙錯誤在第36行第80列。遇到:之後:「\'\\\\(([^;」'。你認爲這可能與交互模式下的PIG有關嗎? –
Martin