it-swarm-ko.tech

Perl의 문자열에서 각 단어의 첫 글자를 어떻게 대문자로 할 수 있습니까?

문자열의 각 단어에서 첫 글자를 대문자로 바꾸는 가장 쉬운 방법은 무엇입니까?

26
Dan Littlejohn

faq 를 참조하십시오.

Ucfirst ()는 문자열을 나누고 나중에 결합하지 않고 문자열에서 각 단어의 첫 글자를 대문자로 입력 해야하는 OP의 질문을 충족한다고 생각하지 않습니다.

16
piCookie

@brian이 의견에 언급했듯이 @piCookie가 현재 허용하는 답변이 잘못되었습니다!

$_="what's the wrong answer?";
s/\b(\w)/\U$1/g
print; 

그러면 "무엇이 잘못 되었습니까?"라고 인쇄됩니다. 잘못 대문자 S를 통지

FAQ 에 따르면 아마도 사용하는 것이 더 낫습니다.

s/([\w']+)/\u\L$1/g

또는 Text :: Autoformat

48
Pat

cfirst 함수를 살펴보십시오.

$line = join " ", map {ucfirst} split " ", $line;
10
zigdon
$capitalized = join '', map { ucfirst lc $_ } split /(\s+)/, $line;

공백을 캡처하면 목록에 공백이 삽입되고 원래 간격을 다시 작성하는 데 사용됩니다. "ucfirst lc"는 "teXT"를 "Text"로 대문자로 표시합니다.

9
kixx
$string =~ s/(\w+)/\u$1/g;

잘 작동합니다

6
moritz

이렇게하면 각 줄의 첫 번째 단어 만 대문자로 표시됩니다.

Perl -ne "print (ucfirst($1)$2)  if s/^(\w)(.*)/\1\2/" file
2
alemol

대문자로 된 단어가 있고 대신 대문자로만 사용하려는 경우 FAQ 솔루션이 작동하지 않습니다.보다 복잡한 정규식을 만들거나 FAQ 솔루션을 적용하기 전에 문자열에서 lc를 수행하십시오.

1
Karen in Wichita

Perl로 작성된 아주 멋진 코드 인 ' Title Case '를 사용할 수 있습니다.

1
vsync

맵의 cfirst 함수는 확실히이 작업을 수행하지만 매우 기본적인 방식으로 만 수행됩니다. 좀 더 정교한 것을 원한다면 John Gruber 's TitleCase script 를 살펴보십시오.

0
RET

이 시도 :

echo "what's the wrong answer?" |Perl -pe 's/^/ /; s/\s(\w+)/ \u$1/g; s/^ //'

정답은 무엇입니까?

0
bill god