24

これは私が推測する簡単な質問ですが、次のコマンドを使用して、行の最初の小文字だけを.txtファイルから大文字に変更しようとしていました。

$_ =~ s/^[a-z]/\U/;

実行すると、小文字を大文字に変更する代わりに、行頭の小文字が行の最上位ビットに置き換えられます。たとえば、行がnAkld987aBALPaapofikU88次のように置き換えられる代わりにNAkld987Akld987...

4

4 に答える 4

30

を使用できます/使用する必要がありますucfirst。あなたの意図が文字列の最初の文字を大文字にすることであることがメンテナにとってはるかに明白なので、私はそうすべきだと言います。私は正規表現が大好きですが、この場合、それは正しいアプローチではないと感じています。

my $str = "test";
print ucfirst($str);
于 2012-11-21T16:31:47.893 に答える
24

first characterキャプチャグループでをキャプチャし、を使用しback referenceてに変換する必要があります。uppercase\u

これを使ってみてください:-

$_ =~ s/^([a-z])/\u$1/;
于 2012-11-21T16:32:00.963 に答える
15

関数を使用するだけucfirstです。

正規表現を使用したい場合は、次のことができます。

$_ =~ s/^([a-z])/\u$1/;

また

$_ =~ s/^([a-z])/\U$1\E/;
于 2012-11-21T16:32:57.300 に答える
0

正規表現に習熟していないので、これを次のように実行しました(これは、リストを繰り返し、操作されたリストを返すことを除いて、map基本的には):foreach

$string = join " ", map { ucfirst } split " ", $string;
于 2018-02-26T23:12:15.023 に答える