15 번째 수정본 소스 보기 : Perl/문자열나누기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: Perl/문자열나누기 는 읽기 전용 페이지입니다.
== # 하나의 스트링을 쪼개어서 배열로 만들기 == {{{#!vim perl @변수 = split( / 구분자 /, $변수); }}} * $변수의 내용을 구분자에 의해 분리하여 배열을 반환한다. * 구분자는 [[/정규표현식]] 사용가능 {{{#!vim perl @변수 = split( / (구분자) /, $변수); }}} * 구분자에 괄호가 들어가면 매치되는 구분자 역시 배열의 원소가 된다. === # split에 lookaround를 사용하여 특수한 경우가 생기지 않게 하라 === * 원문: [http://www.effectiveperlprogramming.com/blog/1411 Use lookarounds to split to avoid special cases | The Effective Perler] === # split의 특별한 케이스 === * 원문: [http://www.effectiveperlprogramming.com/blog/1416 Know split’s special cases | The Effective Perler] split 에 구분자로 주어지는 패턴이 다음과 같은 경우는 특별하게 동작한다: * 빈 패턴
//
은 문자열을 캐릭터들로 쪼갠다. * 빈 스트링, zero-width로 매치되는 패턴(
?
,
*
, lookaround 등을 사용한)도 문자열을 캐릭터들로 쪼갠다. * 따옴표로 둘러쌓인 단일 스페이스
' '
또는
" "
는 공백을 기준으로 문자열을 분리하되, 제일 앞에 있는 빈 필드는 버린다. * 앵커
/^/
는 문자열을 라인 단위로 쪼갠다. (정확히 이 형태일 때만 그렇고,
/^(?=.)/
와 같이 패턴에 다른 게 섞인다면 - 설령 제대로 매치되더라도 - 동작하지 않는다. 이 때는 패턴에
/m
플래그를 붙여주어야 한다) {{{#!vim perl 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 }}} == # 하나의 스트링을 인코딩에 관계없이 일정 갯수의 문자로 나누기 == 2007년에 끙끙댔던 문제인데, 막상 답을 알고 나니 매우 간단해져서, 과거 내용은 삭제함 * Perl 5.8 이후로는, Encode 모듈이 있으므로, 문자열을 일단 decode하고 나면 한글이든 영문이든 어떤 캐릭터든 "글자 한 개"로 간주되니까 substr 을 쓰든 정규표현식을 쓰든 그냥 쪼개면 된다. {{{#!vim perl # 이 파일은 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"; } }}} {{{#!vim 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와 한] [글] }}} * Perl 5.6과 그 이전 버전에서는 (굳이 그 오래된 버전을 써야 한다면) Text::Iconv 모듈을 사용해서 UTF-16 등 한 문자가 2바이트로 고정된 인코딩으로 바꾸고, 2바이트 단위로 처리한 다음에 다시 원래 인코딩으로 바꿔주면 되겠다. == 기타 ==
----
---- [[컴퓨터분류]]
Perl/문자열나누기
페이지로 돌아가기 |
다른 수정본 보기