2011-03-28 7 views
1

쉼표로 구분 된 줄에 Perl 분할 함수를 사용하고 배열로 구분 된 쉼표 사이에 두 개 이상의 단어 만 캡처하고 싶습니다. 단일 단어는 필요하지 않습니다.Perl 정규 표현식 질문

예를 들어,이 라인 - >> AAA, CCC의 DDD, EEE, FFF GGG UUU, 가 난 단지 원하는, ccc ddd and fff ggg uuu

while(<FH>) 
{ 
    @ = split(/,/); 
} 

답변

1

UPDATE : 추가 "AAA"보호 및 ", "보호도.

분할은 쉼표 주위의 모든 공간을 먹어 버리기 때문에 공백이 포함 된 배열의 모든 요소는 다중 단어입니다.

+0

그게 내가 원하는 것을하지 않고, 나는 개인의 다중 단어를 원하고, 하나의 단어와 여러 단어를 포함하는 전체 줄을 원하지 않는다. ... –

+0

Dallaylaen에게 감사의 말을 전한다. 필요에 따라 작동합니다. 다시 한 번 감사드립니다 –

1

데모 스크립트 :

my @data = (
    'aaa, ccc ddd, eee, fff ggg uuu' 
    , ' aaa bbb ,ccc,eee,fff ggg uuu ' 
    , 'aaa,ccc,eee,fff' 
); 
for my $line (@data) { 
    printf "|%s| ==> \n", $line; 
    $line =~ s/^\s+|\s+$//g; 
    my @cut = grep {// } split(/\s*,\s*/, $line); 
    printf "|%s|\n\n", join('|', @cut); 
} 

출력 :

|aaa, ccc ddd, eee, fff ggg uuu| ==> 
|ccc ddd|fff ggg uuu| 

| aaa bbb ,ccc,eee,fff ggg uuu | ==> 
|aaa bbb|fff ggg uuu| 

|aaa,ccc,eee,fff| ==> 
|| 
Dallaylaen의 솔루션보다 간결

덜하지만, 쉽게/확인 특별한 경우를 처리 할 수 ​​있습니다.

(미확정, 미확정, @parsedvalues) = 분할 /,/

당신은 esentialy 당신이 분할에서 얻을 처음 두 값을 던져 :

+0

라인의 끝과 맨 앞에 \ s *를 지적 해 주셔서 감사합니다. – Dallaylaen

1

그것은만큼 간단합니다.