expression régulière...

bibe83
Invité n'ayant pas de compte PHPfrance

01 nov. 2007, 00:56

Bonjour,
Je souhaite transformer une chaine du type:
"LeLapinQuiDance(DanceLaPolka)" en "Le Lapin Qui Dance (Dance La Polka)"
Bref casser la chaine où il y a des majuscules et des parenthèses ouvrantes et y ajouter un blanc avant, mais pas lors de la première majuscule de la chaine.
Je débute alors avec : $chaine=ereg_replace("[[:upper:]]","_",$chaine);
ça me donne " e apin ui ance( ance a olka)...
j'y capte queud...
merci

Eléphant du PHP | 445 Messages

01 nov. 2007, 01:11

$test = "LeLapinQuiDance(DanceLaPolka)" ;
$test = ereg_replace("[A-Z]"," \\0", $test);    // Ajoute un espace devant chaque majuscule
$test = str_replace("( "," (",$test);           // Remplace l'espace apres ( par un espace avant
$test = trim($test);                            // Enleves les espaces inutiles en debut et fin de chaine
echo $test ;

bibe83
Invité n'ayant pas de compte PHPfrance

01 nov. 2007, 01:21

merci pour la rapidité
Connaitraiez vous un bon tuto sur ce genre de manipulation de chaîne comprehensible par un novice ?
Encore merci...

bibe83
Invité n'ayant pas de compte PHPfrance

01 nov. 2007, 01:32

J'abuse un peu encore...
Comment extraire de la chaine traduite 2 sous chaines :
"Le Lapin Qui Dance" et "Dance La Polka" ?
merci

Eléphant du PHP | 445 Messages

01 nov. 2007, 02:38

tu fais un explode() de ta chaine pour la parenthese ouvrante.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

01 nov. 2007, 10:54

merci pour la rapidité
Connaitraiez vous un bon tuto sur ce genre de manipulation de chaîne comprehensible par un novice ?
Encore merci...
Bonjour,

Voila quelques liens:

http://www.phpfrance.com/tutoriaux/inde ... regulieres
http://naholyr.free.fr/regexp.pdf
http://lumadis.be/regex/tuto_pcre.php
http://www.expreg.com
Quand tout le reste a échoué, lisez le mode d'emploi...

bibe83
Invité n'ayant pas de compte PHPfrance

07 nov. 2007, 00:50

OK pour la fonction explode j'ai joué avec et j'obtient ce que je veux...
Mais j'ai découvert un bug dans ma page lorsque j'ai par exemple :
'LeLapinQuiDance(DanceLeSmurf2)' je voudrais que ça me donne
Le Lapin Qui Dance (Dance Le Smurf 2)
Bref faudrait rajouter un truc qui fasse en sorte que si j'ai un chiffre il me le traite comme une majuscule mais attention si j'ai :
'LeLapinQuiDance(DanceLeSmurf22)' dans ce cas faut pas qu'il traite le '22' comme deux chifres mais comme un nombre => Le Lapin Qui Dance (Dance Le Smurf 22).
Je galère vraiment...

ViPHP
ViPHP | 1380 Messages

07 nov. 2007, 12:14

Il serait utile que tu essayes d'aborder en douceur les regex ou fonctions chaîne de PHP en suivant les liens donnés par @rthur. C'est vraiment utile pour des tas de choses telles que validation de champs de formulaire, mise en forme de texte etc...

Ceci dit, et pour te montrer la puissance du truc voici une solution regex possible (en une seule passe):
preg_replace('#(?<!^)[A-Z0-9]+#', ' $0', $texte)
Remplacera les groupes de majuscules A-Z+ ou groupes de chiffres 0-9+ par espace plus motif SAUF si la majuscule ou chiffre est précédé par l'ancrage de début de chaîne --> assertion arrière négative (?<!^)

Variante pas plus rapide:
preg_replace('#(?<=[a-z])[A-Z0-9]+#', ' $0', $texte)
Remplacera les groupes de majuscules A-Z+ ou groupes de chiffres 0-9+ par espace plus motif UNIQUEMENT pour majuscules ou chiffres est précédés par une minuscule --> assertion arrière positive (?<=[a-z])

Allez, au boulot! :wink:

Et dis-toi bien que les regex sont utilisées par quasi tous les langages modernes. Investissement utile donc.
ripat

bibe83
Invité n'ayant pas de compte PHPfrance

09 nov. 2007, 22:21

Terrible !
Merci...
Allez je me lance avec une certaine apprehension dans les liens..
Encore merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

09 nov. 2007, 22:28

Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer