Pergunta

Qual é a maneira mais fácil de colocar a primeira letra em maiúscula em cada palavra de uma string?

Foi útil?

Solução

Ver as perguntas frequentes.

Não acredito que ucfirst() satisfaça a pergunta do OP de colocar a primeira letra de cada palavra em uma string em maiúscula sem dividir a string e juntá-la mais tarde.

Outras dicas

Como @brian mencionou nos comentários, a resposta atualmente aceita por @piCookie está errada!

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

Isso vai imprimir "Qual é a resposta errada?" observe os s de maneira errada

Enquanto o Perguntas frequentes diz que provavelmente é melhor usar

s/([\w']+)/\u\L$1/g

ou Texto::Autoformatação

Dê uma olhada no primeiro função.

$line = join " ", map {ucfirst} split " ", $line;
$capitalized = join '', map { ucfirst lc $_ } split /(\s+)/, $line;

Ao capturar o espaço em branco, ele é inserido na lista e utilizado para reconstruir o espaçamento original."ucfirst lc" coloca "teXT" em maiúscula para "Texto".

$string =~ s/(\w+)/\u$1/g;

deve funcionar bem

Isso coloca em maiúscula apenas a primeira palavra de cada linha:

perl -ne "print (ucfirst($1)$2)  if s/^(\w)(.*)/\1\2/" file

Observe que a solução de perguntas frequentes não funciona se você tiver palavras em letras maiúsculas e quiser que elas sejam (apenas) maiúsculas.Você pode criar um regex mais complicado ou apenas fazer um lc na string antes de aplicar a solução de FAQ.

Você pode usar 'Caso de título', é um código muito legal escrito em Perl.

O primeiro function em um mapa certamente faz isso, mas apenas de uma forma muito rudimentar.Se você quiser algo um pouco mais sofisticado, dê uma olhada em Script TitleCase de John Gruber.

tente isto:

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

Qual é a resposta errada?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top