2011-08-23 3 views
2

내 perl 스크립트에는 모든 언어 일 수있는 UTF-8로 된 문자열이 제공됩니다. 각 단어의 첫 번째 문자와 대문자로 변환해야하는 단어의 나머지 문자를 대문자로 사용해야합니다. UTF-8 형식으로 텍스트를 그대로 두면서이 작업을 수행해야합니다. 텍스트는 라틴 문자 perl에서 UTF-8 텍스트의 단어 경계

$my_string =~ s/([\w']+)/\u\L$1/g; 

포함 된 경우

다음은 내가이 UTF-8 문자열에서 일을 얻을 수있는 방법을 충분히 잘 작동하는 것 같다?

+2

Perl에는 UTF-8 문자열이 없습니다. 그것은 유니 코드로 된 문자열을 가지고 있으며 바이트 단위의 바이트 문자열을 가지고 있습니다. 이미 작성한 내용은 Perl의 최신 버전에서 이미 잘 작동합니다. 'v5.14 사용하기 ','v5.14 사용하기', 또는 컴파일 유니트 상단의'unicode_strings "기능을 사용하여 제대로 작동하도록 만들 필요가 있습니다. 그러나 다른 것을 필요로하지 않아야합니다. – tchrist

+0

감사합니다. 나는 아직도 사용하고있는 웹 서버가 5.8 perl을 가지고 있다고 언급하는 것을 잊어 버렸기 때문에 안타깝게도이 제안들 중 어느 것도 나에게 사용 가능하지 않다. – appleton

답변

2

친숙해야 할 시설에 대한 개요는 perlunicode을 참조하십시오. 기본적으로 \p{LC}과 같은 것을 찾고 있습니다.

문제 공간은 잘 정의되어 있지 않습니다. 모든 스크립트가 대소 문자에 대한 개념을 가지고있는 것은 아닙니다. LC 속성은 수행하는 스크립트에서만 일치하므로 거기에 있어야합니다.

+0

감사합니다. \ w 대신 \ p {LC}가 잘 작동하는 것 같습니다. – appleton

+0

... \ w에 대한 더 가까운 대체물은 아마도 \ p {Word} – appleton

+0

임에도 불구하고 "\ u \ L $ 1"의 \ u와 \ L은 항상 대문자 또는 소문자로의 올바른 변환을 수행합니까? 이러한 유니 코드 교체? – appleton

관련 문제