如何将Perl中字符串中每个单词的首字母大写?

Dan*_*ohn 26 title-case perl capitalize

将字符串的每个单词中的第一个字母大写的最简单方法是什么?

Pat*_*Pat 49

正如@brian在评论中提到的那样@piCookie目前接受的答案是错误的!

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

这将打印出"错误的答案是什么?" 注意错误的大写S.

正如常见问题解答所说,你可能会更好地使用它

s/([\w']+)/\u\L$1/g
Run Code Online (Sandbox Code Playgroud)

Text :: Autoformat


piC*_*kie 16

常见问题.

我不相信ucfirst()满足OP的问题来大写字符串中每个单词的第一个字母而不分割字符串并稍后加入它.

  • 我现在修改了常见问题解答,删除了每个人都抓住的错误答案,因为他们没有阅读第二段. (4认同)
  • 错误,\ U是通过调用ucfirst在内部实现的,所以你的声明与你自己的建议相矛盾.:-) (2认同)

zig*_*don 11

看看ucfirst函数.

$line = join " ", map {ucfirst} split " ", $line;
Run Code Online (Sandbox Code Playgroud)

  • 请注意,split("",$ line)在任意空格上分割,因此不会保留所有空格. (2认同)

kix*_*ixx 9

$capitalized = join '', map { ucfirst lc $_ } split /(\s+)/, $line;
Run Code Online (Sandbox Code Playgroud)

通过捕获空白,它将插入列表中并用于重建原始间距."ucfirst lc"将"teXT"大写为"Text".


mor*_*itz 6

$string =~ s/(\w+)/\u$1/g;
Run Code Online (Sandbox Code Playgroud)

应该工作得很好