Domanda

Qual è il modo più semplice per rendere maiuscola la prima lettera di ogni parola di una stringa?

È stato utile?

Soluzione

Vedere le domande frequenti.

Non credo che ucfirst() soddisfi la domanda dell'OP di rendere maiuscola la prima lettera di ogni parola in una stringa senza dividere la stringa e unirla successivamente.

Altri suggerimenti

Come menzionato da @brian nei commenti, la risposta attualmente accettata da @piCookie è sbagliata!

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

Questo stamperà "Qual è la risposta sbagliata?" Notare la S erroneamente capitalizzata

Come il FAQ dice che probabilmente è meglio usare

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

O Testo::Formattazione automatica

Dai un'occhiata a ucfirst funzione.

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

Catturando lo spazio bianco, questo viene inserito nell'elenco e utilizzato per ricostruire la spaziatura originale."ucfirst lc" rende maiuscolo "teXT" in "Testo".

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

dovrebbe funzionare bene

Questo rende maiuscolo solo la prima parola di ogni riga:

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

Tieni presente che la soluzione delle domande frequenti non funziona se hai parole in maiuscolo e desideri invece che siano (solo) in maiuscolo.Puoi creare una regex più complicata o semplicemente eseguire un lc sulla stringa prima di applicare la soluzione FAQ.

Puoi usare 'Caso del titolo', è un pezzo di codice davvero interessante scritto in Perl.

IL ucfirst La funzione in una mappa fa certamente questo, ma solo in modo molto rudimentale.Se vuoi qualcosa di un po' più sofisticato, dai un'occhiata Script TitleCase di John Gruber.

prova questo :

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

Qual è la risposta sbagliata?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top