Perl で文字列内の各単語の最初の文字を大文字にするにはどうすればよいですか?
-
09-06-2019 - |
質問
文字列の各単語の最初の文字を大文字にする最も簡単な方法は何ですか?
解決
見る よくある質問.
ucfirst() が、文字列を分割して後で結合することなく、文字列内の各単語の最初の文字を大文字にするというOPの質問を満たすとは思えません。
他のヒント
@brianがコメントで言及しているように、@piCookieによって現在受け入れられている回答は間違っています。
$_="what's the wrong answer?";
s/\b(\w)/\U$1/g
print;
これには「何が間違っているのですか?」と印刷されます。誤って大文字になっていることに注意してください
として よくある質問 おそらく使用したほうが良いと言います
s/([\w']+)/\u\L$1/g
または テキスト::オートフォーマット
を見てください。 UCファースト 関数。
$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 で書かれた非常にクールなコードです。
の UCファースト マップ内の関数は確かにこれを行いますが、それは非常に初歩的な方法にすぎません。もう少し洗練されたものが必要な場合は、こちらをご覧ください John Gruber の TitleCase スクリプト.
これを試して :
echo "what's the wrong answer?" |perl -pe 's/^/ /; s/\s(\w+)/ \u$1/g; s/^ //'
間違った答えは何ですか?
所属していません StackOverflow