2014-09-19 3 views
0

나는 최근에 방문한 URL 목록을 생성하기 위해 PIG를 사용하고 있습니다. 각 URL에는 방문한 제품 페이지를 나타내는 일련의 숫자가 있습니다. 나는함수를 사용하여 길이가 6-8 인 숫자 문자열을 추출하려고합니다. 숫자 자열은 jobs2/view/ 바로 뒤에 있으며 보통은 +&cd으로 끝나지만 때로는 )으로 끝날 수도 있습니다.정규 표현식을 사용하여 URL에서 숫자의 문자열을 추출합니다.

(http://a.com/search?q=cache:QD7vZRHkPQoJ:ca.xyz.com/jobs2/view/17069404+&cd=1&hl=en&ct=clnk&gl=ca) (http://a.com/search?q=cache:G9323j2oNbAJ:ca.xyz.com/jobs2/view/5977065+&cd=1&hl=en&ct=clnk&gl=ca) (http://a.com/search?q=cache:aNspmG11qAJ:hk.xyz.com/jobs2/view/16988928+&cd=2&hl=zh-TW&ct=clnk&gl=hk) (http://a.com/search?q=cache:aNspmG11AJ:hk.xyz.com/jobs2/view/16988928+&cd=2&hl=zh-TW&ct=clnk&gl=hk) (http://a.com/search?q=cache:aNspmG11qAJ:hk.xyz.com/jobs2/view/16988928+&cd=2&hl=zh-TW&ct=cl K & GL = 홍콩) 여기

는 내가 현재 정규식 : 여기

몇 가지 예를 들어 URL이 있습니다 다음을 사용 :

J = FOREACH jpage GENERATE FLATTEN(REGEX_EXTRACT_ALL(TEXTCOLUMN, '\/view\/(\d+)\+\&')) as (output:chararray) 

예컨대 THER 형태 :

'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]', 'view.([0-9]+)', 'view\/([\d]+)\+',

'[0-9][0-9][0-9]+''[0-9][0-9][0-9]*'; 어느 것도 작동하지 않습니다.

아무도 여기에서 도움을 줄 수 있습니까? 아니면 다른 방법으로 갈 수 있습니까?

많은 감사, MM

답변

0

나는 돼지에 익숙하지 해요,하지만이 정규식은 대상과 일치합니다 : A (비 소모), 뒤에 보이는 전체를 사용하여

(?<=/jobs2/view/)\d+ 

일치 (일치 항목의 그룹이 아님)이 내 번호입니다.

+0

ERROR 1,200 <1 행 7, column 68> 예기치 않은 문자 'D' – user3521607

1

"예상치 못한 문자 'D'"에 대한 이유는 단일 백 슬래시 대신 이중 백 슬래시를 넣어야한다는 것입니다. 예는 모든 입력 문자열

input.txt 
http://a.com/search?q=cache:QD7vZRHkPQoJ:ca.xyz.com/jobs2/view/17069404+&cd=1&hl=en&ct=clnk&gl=ca 
http://a.com/search?q=cache:G9323j2oNbAJ:ca.xyz.com/jobs2/view/5977065+&cd=1&hl=en&ct=clnk&gl=ca 
http://a.com/search?q=cache:aNspmG11qAJ:hk.xyz.com/jobs2/view/16988928+&cd=2&hl=zh-TW&ct=clnk&gl=hk 
http://a.com/search?q=cache:aNspmG11AJ:hk.xyz.com/jobs2/view/16988928+&cd=2&hl=zh-TW&ct=clnk&gl=hk 
http://a.com/search?q=cache:aNspmG11qAJ:hk.xyz.com/jobs2/view/16988928+&cd=2&hl=zh-TW&ct=clk&gl=hk 
http://a.com/search?q=cache:aNspmG11qAJ:hk.xyz.com/jobs2/view/16988928)=2&hl=zh-TW&ct=clk&gl=hk 
http://webcache.googleusercontent.com/search?q=cache:http://my.linkedin.com/jobs2/view/9919248 

Updated Pigscript: 
A = LOAD 'input.txt' as line; 
B = FOREACH A GENERATE REGEX_EXTRACT(line,'.*/view/(\\d+)([+|&|cd|)?]+)?',1); 
dump B; 

(17069404)
(5977065)
(16988928) 여기서 [\\ d 개 +]

솔루션, 유효성을 검사에 [\ D +] 교체
(16,988,928)
(16,988,928)
(16,988,928)

+0

문자의 순서와 일치하도록 문자 클래스에 + 기호가 추가되었습니다. –

+0

좋아 보이지만 숫자 문자열이 ")"로 끝나고 일반적인 "+ & ..."로 끝나는 경우를 캡처하지 않습니다. – user3521607

+0

문자열의 예를 들어 줄 수 있습니까? –

관련 문제