Quel est le moyen le plus simple de mettre en majuscule la première lettre de chaque mot d'une chaîne?
Voir le faq .
Je ne crois pas que ucfirst () réponde à la question du PO de mettre en majuscule la première lettre de chaque mot d'une chaîne sans la scinder et la rejoindre plus tard.
Comme @brian mentionne dans les commentaires, la réponse actuellement acceptée par @piCookie est fausse!
$_="what's the wrong answer?";
s/\b(\w)/\U$1/g
print;
Cela affichera "Quelle est la mauvaise réponse?" remarquez le S mal capitalisé
Comme le dit le FAQ , il vaut probablement mieux utiliser
s/([\w']+)/\u\L$1/g
Regardez la fonction ucfirst .
$line = join " ", map {ucfirst} split " ", $line;
$capitalized = join '', map { ucfirst lc $_ } split /(\s+)/, $line;
En capturant les espaces, il est inséré dans la liste et utilisé pour reconstruire l'espacement d'origine. "ucfirst lc" capitalise "teXT" en "texte".
$string =~ s/(\w+)/\u$1/g;
devrait bien fonctionner
Ceci ne met en majuscule que le premier mot de chaque ligne:
Perl -ne "print (ucfirst($1)$2) if s/^(\w)(.*)/\1\2/" file
Notez que la solution FAQ ne fonctionne pas si vous avez des mots en majuscules et que vous souhaitez les mettre en majuscules. Vous pouvez soit créer une expression rationnelle plus compliquée, soit simplement faire un lc sur la chaîne avant d'appliquer la solution FAQ.
Vous pouvez utiliser ' Title Case ', c'est un morceau de code très cool écrit en Perl.
La fonction ucfirst sur une carte le fait certainement, mais seulement de manière très rudimentaire. Si vous voulez quelque chose d'un peu plus sophistiqué, jetez un coup d'œil à Le script TitleCase de John Gruber .
essaye ça :
echo "what's the wrong answer?" |Perl -pe 's/^/ /; s/\s(\w+)/ \u$1/g; s/^ //'
Quelle est la mauvaise réponse?