Perl에서 문자열의 각 단어의 첫 글자를 어떻게 대문자로 표시할 수 있나요?

StackOverflow https://stackoverflow.com/questions/77226

  •  09-06-2019
  •  | 
  •  

문제

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

도움이 되었습니까?

해결책

보다 자주 묻는 질문.

나는 ucfirst()가 문자열을 분할하고 나중에 결합하지 않고 문자열에 있는 각 단어의 첫 글자를 대문자로 사용하라는 OP의 질문을 만족시키지 않는다고 생각합니다.

다른 팁

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

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

이것은 "잘못된 대답은 무엇입니까?" 잘못된 자본화 된 s를 주목하십시오

다음과 같이 자주하는 질문 당신은 아마도 다음을 사용하는 것이 더 나을 것이라고 말합니다

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

또는 텍스트::자동 서식

다음을 살펴보세요. 유우퍼스트 기능.

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

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

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

잘 작동해야 해

이는 각 줄의 첫 번째 단어만 대문자로 표시합니다.

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

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

당신이 사용할 수있는 '제목 케이스', Perl로 작성된 매우 멋진 코드입니다.

그만큼 유우퍼스트 지도의 함수는 확실히 이 작업을 수행하지만 매우 기초적인 방식으로만 수행됩니다.좀 더 세련된 것을 원한다면 살펴보십시오. John Gruber의 TitleCase 스크립트.

이 시도 :

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

잘못된 대답은 무엇입니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top