web-dev-qa-db-ja.com

Perlで文字列の各単語の最初の文字を大文字にするにはどうすればよいですか?

文字列の各単語の最初の文字を大文字にする最も簡単な方法は何ですか?

26
Dan Littlejohn

faq を参照してください。

Ucfirst()がOPの質問を満たし、文字列を分割して後で結合することなく、文字列内の各Wordの最初の文字を大文字にすることはないと思います。

16
piCookie

@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

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

Perlで書かれたとてもクールなコードである ' Title Case 'を使用できます。

1
vsync

マップの cfirst 関数は確かにこれを行いますが、非常に初歩的な方法でのみ行います。もう少し洗練されたものが必要な場合は、 John GruberのTitleCaseスクリプト を参照してください。

0
RET

これを試して :

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

間違った答えは何ですか?

0
bill god