[첫화면으로]Perl/문자열나누기

마지막으로 [b]

15 번째 수정본
(15 번째 수정본부터 15 번째 수정본까지의 변경사항) (소소한 수정)
(두 수정본의 내용이 동일하거나, 수정본을 비교할 수 없음.)
1. 하나의 스트링을 쪼개어서 배열로 만들기
1.1. split에 lookaround를 사용하여 특수한 경우가 생기지 않게 하라
1.2. split의 특별한 케이스
2. 하나의 스트링을 인코딩에 관계없이 일정 갯수의 문자로 나누기

1. 하나의 스트링을 쪼개어서 배열로 만들기

@변수 = split( / 구분자 /, $변수);

@변수 = split( / (구분자) /, $변수);

1.1. split에 lookaround를 사용하여 특수한 경우가 생기지 않게 하라

1.2. split의 특별한 케이스

split 에 구분자로 주어지는 패턴이 다음과 같은 경우는 특별하게 동작한다:

my $str = '  Buster and Mimi';

print join(":", split //, $str);     # 빈 패턴
#  : :B:u:s:t:e:r: :a:n:d: :M:i:m:i

print join(":", split /z*/, $str);   # 빈 스트링
#  : :B:u:s:t:e:r: :a:n:d: :M:i:m:i

print join(":", split / /, $str);    # 일반적인 공백 패턴
# ::Buster:and:Mimi                  # 앞에 ""가 두 번 들어감
print join(":", split ' ', $str);    # 따옴표로 둘러싼 단일 공백의 경우
# Buster:and:Mimi                    # 앞에 두 개의 ""가 없어짐

$str = "Line 1\nLine 2\nLine 3";
print join(":", split /^/, $str);
# Line 1
# :Line 2
# :Line 3

2. 하나의 스트링을 인코딩에 관계없이 일정 갯수의 문자로 나누기

2007년에 끙끙댔던 문제인데, 막상 답을 알고 나니 매우 간단해져서, 과거 내용은 삭제함

# 이 파일은 cp949로 저장되어 있음
use Encode;

my $str    = decode("cp949", "English와 한글");
my $length = length($str);

for (my $i = 1; $i < $length; $i++) {
    printf "%2d : ", $i;
    print "[",
             encode("cp949", substr($str, 0, $i)),
             "] [",
             encode("cp949", substr($str, $i)),
             "]\n";
}

 1 : [E] [nglish와 한글]
 2 : [En] [glish와 한글]
 3 : [Eng] [lish와 한글]
 4 : [Engl] [ish와 한글]
 5 : [Engli] [sh와 한글]
 6 : [Englis] [h와 한글]
 7 : [English] [와 한글]
 8 : [English와] [ 한글]
 9 : [English와 ] [한글]
10 : [English와 한] [글]

기타

이름:  
Homepage:
내용:
 

<trackbackreceived>

컴퓨터분류

이 수정본 편집일: 2011-12-30 12:16 am (변경사항 [d])
10916 hits | Permalink | 변경내역 보기 [h] | 현재 수정본 보기 | 15 번째 수정본 소스 보기