[펄/Perl] split 연산자로, 문자열 (단어별로) 분리하여 배열에 저장 - split 함수 사용법
Tuesday, August 29, 2006
스폰서 링크split은, 함수(Function)처럼 보이지만, 실은 함수가 아니라 연산자(Operator)입니다.
어떤 문자열을 "구분 기호"로써 분리하여, 배열 속에 차곡차곡 나누어 담는 기능을 가집니다.
사용법을 한글로 표현하자면 이렇습니다:
이렇게
분리 기호 (분리자 Separator) 와, 분리할 문자열을 생략할 수 있습니다. 그러면, 디폴트 변수인 $_ 의 내용에서 공백을 기준으로 분리합니다.
다음의 3개는 동일한 역할을 합니다.
@_ = split;
@_ = split / /, $_;
@_ = split ' ', $_;
@_ = split /\s+/, $_;
또한 /\s+/ 이렇게 분리자를 정규식 / 정규표현식 (Regular Expressions; Regex) 으로 지정할 수도 있습니다.
다음의 예제를 보면 쉽게 알 수 있습니다. "둥글고 하얀 어떤 거대한..." 등의 문장을 공백을 기준으로 분리하면, 각 단어별로 분리되는데, 그 단어들을 배열 속에 집어 넣고, 그 배열의 내용을 DumpArray 서브루틴을 사용해 알아보기 쉽게 출력합니다.
"산모퉁이,너머의,먼,하늘에는,희미한..." 이 부분은 쉼표로 분리된 문자열을 분해하는 예제입니다.
split /,/, $s2;
이렇게 분리자로서 쉼표(,)을 넣어주면 됩니다.
위의 예제를 실행한 결과:
평범한 문장(문자열)이, 단어별로 분해된 것을 알 수 있습니다.
split 연산자의 정반대 역할을 하는 join 함수 사용법입니다: ▶▶ Perl/펄] join 함수 사용법 예제; join Function Example
▶▶ [Perl] 배열(Array) 덤프; 디버그용
☞ Perl
어떤 문자열을 "구분 기호"로써 분리하여, 배열 속에 차곡차곡 나누어 담는 기능을 가집니다.
사용법을 한글로 표현하자면 이렇습니다:
@배열 = split /분리자/, $문자열;
이렇게
@_ = split;
분리 기호 (분리자 Separator) 와, 분리할 문자열을 생략할 수 있습니다. 그러면, 디폴트 변수인 $_ 의 내용에서 공백을 기준으로 분리합니다.
다음의 3개는 동일한 역할을 합니다.
@_ = split;
@_ = split / /, $_;
@_ = split ' ', $_;
@_ = split /\s+/, $_;
또한 /\s+/ 이렇게 분리자를 정규식 / 정규표현식 (Regular Expressions; Regex) 으로 지정할 수도 있습니다.
다음의 예제를 보면 쉽게 알 수 있습니다. "둥글고 하얀 어떤 거대한..." 등의 문장을 공백을 기준으로 분리하면, 각 단어별로 분리되는데, 그 단어들을 배열 속에 집어 넣고, 그 배열의 내용을 DumpArray 서브루틴을 사용해 알아보기 쉽게 출력합니다.
split 연산자(x함수) 사용 예제
#!/usr/bin/perl
use strict; use warnings;
# 디폴트 변수인 $_ 의 내용을 분해하여, 디폴트 배열인 @_ 에 넣어 출력
$_ = "둥글고 하얀 어떤 거대한 무엇이 자꾸만 떠올랐는데 마치 이 세상의 것이 아닌 것처럼 여겨졌다.";
@_ = split;
&DumpArray(@_);
# 변수 $s 의 내용을 분해하여, 배열 @foo 에 넣어 출력
my $s = "무슨 기척을 느끼고 뒤돌아보았더니 아까 그 행인이 산모퉁이를 황급히 돌아가고 있었다.";
my @foo = split / /, $s;
&DumpArray(@foo);
# 쉼표로 분리된 변수 $s2 의 내용을 분해하여, 배열 @foo2 에 넣어 출력
my $s2 = "산모퉁이,너머의,먼,하늘에는,희미한,구름이,안개처럼,끼어,있었다.";
my @foo2 = split /,/, $s2;
&DumpArray(@foo2);
#################################################
# 배열 요소를 출력하는 서브루틴
sub DumpArray {
printf "Array Total Elements: %d\n", $#_ + 1;
for (my $i = 0; $i <= $#_; $i++) {
printf "[%d] = \"$_[$i]\"\n", $i;
}
}
use strict; use warnings;
# 디폴트 변수인 $_ 의 내용을 분해하여, 디폴트 배열인 @_ 에 넣어 출력
$_ = "둥글고 하얀 어떤 거대한 무엇이 자꾸만 떠올랐는데 마치 이 세상의 것이 아닌 것처럼 여겨졌다.";
@_ = split;
&DumpArray(@_);
# 변수 $s 의 내용을 분해하여, 배열 @foo 에 넣어 출력
my $s = "무슨 기척을 느끼고 뒤돌아보았더니 아까 그 행인이 산모퉁이를 황급히 돌아가고 있었다.";
my @foo = split / /, $s;
&DumpArray(@foo);
# 쉼표로 분리된 변수 $s2 의 내용을 분해하여, 배열 @foo2 에 넣어 출력
my $s2 = "산모퉁이,너머의,먼,하늘에는,희미한,구름이,안개처럼,끼어,있었다.";
my @foo2 = split /,/, $s2;
&DumpArray(@foo2);
#################################################
# 배열 요소를 출력하는 서브루틴
sub DumpArray {
printf "Array Total Elements: %d\n", $#_ + 1;
for (my $i = 0; $i <= $#_; $i++) {
printf "[%d] = \"$_[$i]\"\n", $i;
}
}
"산모퉁이,너머의,먼,하늘에는,희미한..." 이 부분은 쉼표로 분리된 문자열을 분해하는 예제입니다.
split /,/, $s2;
이렇게 분리자로서 쉼표(,)을 넣어주면 됩니다.
위의 예제를 실행한 결과:
D:\Z>0.pl
Array Total Elements: 14
[0] = "둥글고"
[1] = "하얀"
[2] = "어떤"
[3] = "거대한"
[4] = "무엇이"
[5] = "자꾸만"
[6] = "떠올랐는데"
[7] = "마치"
[8] = "이"
[9] = "세상의"
[10] = "것이"
[11] = "아닌"
[12] = "것처럼"
[13] = "여겨졌다."
Array Total Elements: 11
[0] = "무슨"
[1] = "기척을"
[2] = "느끼고"
[3] = "뒤돌아보았더니"
[4] = "아까"
[5] = "그"
[6] = "행인이"
[7] = "산모퉁이를"
[8] = "황급히"
[9] = "돌아가고"
[10] = "있었다."
Array Total Elements: 9
[0] = "산모퉁이"
[1] = "너머의"
[2] = "먼"
[3] = "하늘에는"
[4] = "희미한"
[5] = "구름이"
[6] = "안개처럼"
[7] = "끼어"
[8] = "있었다."
D:\Z>
Array Total Elements: 14
[0] = "둥글고"
[1] = "하얀"
[2] = "어떤"
[3] = "거대한"
[4] = "무엇이"
[5] = "자꾸만"
[6] = "떠올랐는데"
[7] = "마치"
[8] = "이"
[9] = "세상의"
[10] = "것이"
[11] = "아닌"
[12] = "것처럼"
[13] = "여겨졌다."
Array Total Elements: 11
[0] = "무슨"
[1] = "기척을"
[2] = "느끼고"
[3] = "뒤돌아보았더니"
[4] = "아까"
[5] = "그"
[6] = "행인이"
[7] = "산모퉁이를"
[8] = "황급히"
[9] = "돌아가고"
[10] = "있었다."
Array Total Elements: 9
[0] = "산모퉁이"
[1] = "너머의"
[2] = "먼"
[3] = "하늘에는"
[4] = "희미한"
[5] = "구름이"
[6] = "안개처럼"
[7] = "끼어"
[8] = "있었다."
D:\Z>
평범한 문장(문자열)이, 단어별로 분해된 것을 알 수 있습니다.
split 연산자의 정반대 역할을 하는 join 함수 사용법입니다: ▶▶ Perl/펄] join 함수 사용법 예제; join Function Example
▶▶ [Perl] 배열(Array) 덤프; 디버그용
☞ Perl
Post a Comment
<< Home