文字列の各単語の最初の文字を大文字にする最も簡単な方法は何ですか?
10 に答える
@brian がコメントで言及しているように、@piCookie によって現在受け入れられている回答は間違っています!
$_="what's the wrong answer?";
s/\b(\w)/\U$1/g
print;
これにより、「What'S The Wrong Answer?」が出力されます。大文字の S が間違っていることに注意してください
FAQにあるように、おそらく使用したほうがよいでしょう
s/([\w']+)/\u\L$1/g
または Text::Autoformat
よくある質問を参照してください。
ucfirst()
文字列を分割して後で結合することなく、文字列内の各単語の最初の文字を大文字にするというOPの質問を満たすとは思いません。
ucfirst関数を見てください。
$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 で書かれた非常にクールなコードである' Title Case 'を使用できます。
マップのucfirst関数は確かにこれを行いますが、非常に初歩的な方法でのみです。もう少し洗練されたものが必要な場合は、John Gruber の TitleCase script をご覧ください。