Ce n'est pas quelque chose que je normalement utiliser une expression régulière pour, mais ma solution est pas exactement ce que vous appelez « belle »:
$string = join("", map(ucfirst, split(/(\s+)/, $string)));
Ce split()
s la chaîne par des espaces et capture toutes l'espace, puis passe à travers chaque élément de la liste et fait ucfirst
sur eux (en faisant le premier caractère majuscule), puis join()
s leur ensemble en une seule chaîne. Pas terrible, mais peut-être que vous aimerez mieux une regex. Personnellement, je n'aime pas \Q
ou \U
ou d'autres constructions regex semi-maladroites.
EDIT: Quelqu'un d'autre a mentionné que la ponctuation pourrait être un problème potentiel. Si, par exemple, vous voulez ceci:
...string
changé à ceci:
...String
-à-dire que vous voulez les mots en majuscules, même s'il y a des signes de ponctuation devant eux, essayer quelque chose comme ceci:
$string = join("", map(ucfirst, split(/(\w+)/, $string)));
La même chose, mais split()
s sur les mots (\w+
) de sorte que les éléments capturés de la liste ne sont que des mots. Même effet global, mais mettra en majuscule les mots qui ne commencent pas par un caractère de mot. Remplacez \w
par [a-zA-Z]
pour éliminer la tentative de mise en majuscule des chiffres. Et juste généralement le modifier comme vous le souhaitez.
Qu'essayez-vous de faire? Si vous essayez de faire des choses du cas? Il y a un perlfaq pour ça. –
demander sur SO est plus rapide, et je suis sûr que cela va profiter à quelqu'un d'autre quelque part dans le monde une fois que google l'indexe. Je n'utilise pas Perl assez souvent que je peux me souvenir de tous les petits trucs que je connaissais – Kip