2010-07-29 6 views
5

여러 개의 공백이있는 문자열을 분할하려고합니다. 2 개 이상의 공백이있는 부분 만 분할하고 싶습니다. 나는 여러 가지를 시도했고 나는 모든 글자를 쪼개서 똑같은 출력을 얻는다. \b(\s{2,})\bperl로 여러 개의 공백이있는 문자열 분할?

당신에게 단어 boundries 사이에 여러 개의 공백 무엇을 얻어야한다 : 여기

@cellMessage = split(s/ {2,}//g, $message); 
       foreach(@cellMessage){ 
        print "$_ \n"; 
       } 
+0

이 질문에 사용하는 언어로 질문을하면 더 많은 답변을 얻을 수 있습니다. – JnBrymn

+0

는 저에게 perl 같이 보인다. ;) – relet

+0

그래 ... 나는 펄을 모르지만 이것은 나에게 펄처럼 보인다. 아마도 오타 일 것입니다. ; P – strager

답변

12
@cellMessage = split(/ {2,}/, $message); 
+0

굉장한 훌륭한 작업 – shinjuo

+1

하지만 실제로는 공백이 아니며 공백 만있는 것은 아닙니다. \ s는 탭을 제공합니다 : @cellMessage = split (/ \ s {2,} /, $ message); – Erik

+0

또 다른 작은 개선점은 {2} 대신 +를 사용하는 것입니다. +는 정확히 "적어도 하나"를 의미합니다 : split (/ \ s + /, $ message); –

-1

이 하나를 시도하려고 마지막 일이다.

+0

Shinjuo의 구문이 잘못되었습니다. 단어 경계와는 아무런 관련이 없습니다. 에릭은 정답을 가지고 있습니다. – jmz

9

나는이를 추천 할 것입니다 당신이 당신의 예에서 사용 된 구문을 유지 :

@cellMessage = split(/\s{2,}/, $message); 
       foreach(@cellMessage){ 
        print "$_ \n"; 
       } 

당신이 어떤 공백 문자 (탭, 공백, 등 ...) 일치하기 때문이다. 원래 코드의 문제는 split 명령어가 패턴을 찾고 사용자가 입력 한 정규 표현식이 을 개별 문자로 분할하는 //이라는 빈 문자열을 생성한다는 것입니다.

2
use strict; 
use warnings; 
use Data::Dumper; 

#     1 22  333 
my $message = 'this that other 555'; 
my @cellMessage = split /\s{2,}/, $message; 
print Dumper(\@cellMessage); 

__END__ 

$VAR1 = [ 
      'this that', 
      'other', 
      '555' 
     ]; 
0

당신 실제로 수행 할 수 있습니다

@cellMessage = 분할 (/ \ S + /, $ 메시지);

"@cellMessage = split (/ {2,} /, $ message);와 동일한 기능을 수행합니다. 하지만 나에게 조금 더 깨끗해 보인다.

+3

걱정하지 마십시오. 여기에 대한 해답은 1 개 이상의 공백에서만 작동합니다. – user2506092