j'ai réussi à mettre en œuvre une fonction qui convertit le cas de chameau aux mots, en utilisant la solution proposée par @ridgerunner dans cette question:Combiner des expressions régulières pour séparer la chaîne de camelCase en mots
Split camelCase word into words with php preg_match (Regular Expression)
Cependant, je veux pour gérer également intégrés comme celui-ci Abreviations:
'hasABREVIATIONEmbedded' se traduit par «Est-ce que ABRÉVIATIONS embedded
je suis venu avec cette solution:
<?php
function camelCaseToWords($camelCaseStr)
{
// Convert: "TestASAPTestMore" to "TestASAP TestMore"
$abreviationsPattern = '/' . // Match position between UPPERCASE "words"
'(?<=[A-Z])' . // Position is after group of uppercase,
'(?=[A-Z][a-z])' . // and before group of lowercase letters, except the last upper case letter in the group.
'/x';
$arr = preg_split($abreviationsPattern, $camelCaseStr);
$str = implode(' ', $arr);
// Convert "TestASAP TestMore" to "Test ASAP Test More"
$camelCasePattern = '/' . // Match position between camelCase "words".
'(?<=[a-z])' . // Position is after a lowercase,
'(?=[A-Z])' . // and before an uppercase letter.
'/x';
$arr = preg_split($camelCasePattern, $str);
$str = implode(' ', $arr);
$str = ucfirst(trim($str));
return $str;
}
$inputs = array(
'oneTwoThreeFour',
'StartsWithCap',
'hasConsecutiveCAPS',
'ALLCAPS',
'ALL_CAPS_AND_UNDERSCORES',
'hasABREVIATIONEmbedded',
);
echo "INPUT";
foreach($inputs as $val) {
echo "'" . $val . "' translates to '" . camelCaseToWords($val). "'\n";
}
La sortie est:
INPUT'oneTwoThreeFour' translates to 'One Two Three Four'
'StartsWithCap' translates to 'Starts With Cap'
'hasConsecutiveCAPS' translates to 'Has Consecutive CAPS'
'ALLCAPS' translates to 'ALLCAPS'
'ALL_CAPS_AND_UNDERSCORES' translates to 'ALL_CAPS_AND_UNDERSCORES'
'hasABREVIATIONEmbedded' translates to 'Has ABREVIATION Embedded'
Il fonctionne comme prévu.
Ma question est: Puis-je combiner les 2 expressions régulières $ abreviationsPattern et camelCasePattern donc j'évite de recourir à la fonction preg_split() deux fois?
Pourquoi utilisez-vous le modificateur 'x' quand vous évitez ensuite tous les espaces par concaténation et en utilisant des commentaires PHP au lieu de commentaires regex? Le point de trou de 'x' est que vous pouvez passer votre expression sous la forme d'une chaîne multiligne, avec des commentaires' # ... '. –
Je n'étais pas au courant de la signification de \ x. J'ai copié le motif de la source mentionnée et développée à partir de là. Merci pour votre info. – stou