La réponse de DigitalRoss ne reconnaîtra pas les acronymes intégrés dans le CamelCase. Par exemple, il divisera "MyHTMLTricks" en "My H T M L Tricks" au lieu de "My HTML Tricks".
Voici une autre option basée sur la fonction AsSpaced()
dans PmWiki, qui fait un excellent travail d'être sensible aux cas comme celui-ci:
"MyHTMLTricks" \
.gsub(/([[:lower:]\\d])([[:upper:]])/, '\1 \2') \
.gsub(/([^-\\d])(\\d[-\\d]*(|$))/,'\1 \2') \
.gsub(/([[:upper:]])([[:upper:]][[:lower:]\\d])/, '\1 \2')
=> "My HTML Tricks"
L'autre chose que j'aime cette approche est qu'elle laisse la chaîne une chaîne, au lieu de la transformer en tableau. Si vous voulez vraiment le tableau, alors ajoutez juste un split à la fin.
"MyHTMLTricks" \
.gsub(/([[:lower:]\\d])([[:upper:]])/, '\1 \2') \
.gsub(/([^-\\d])(\\d[-\\d]*(|$))/,'\1 \2') \
.gsub(/([[:upper:]])([[:upper:]][[:lower:]\\d])/, '\1 \2') \
.split
=> ["My", "HTML", "Tricks"]
Pour l'enregistrement, voici le code PHP original de PmWiki.
function AsSpaced($text) {
$text = preg_replace("/([[:lower:]\\d])([[:upper:]])/", '$1 $2', $text);
$text = preg_replace('/([^-\\d])(\\d[-\\d]*(|$))/', '$1 $2', $text);
return preg_replace("/([[:upper:]])([[:upper:]][[:lower:]\\d])/", '$1 $2', $text);
}
Que voudriez-vous fait avec 'ThisIsANarrowImageOfHIV?' Faire une jointure avec n, ou diviser le VIH? –