Page 1 sur 1

expression régulière...

Posté : 01 nov. 2007, 00:56
par bibe83
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

Posté : 01 nov. 2007, 01:11
par h0_noMan
$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 ;

Posté : 01 nov. 2007, 01:21
par bibe83
merci pour la rapidité
Connaitraiez vous un bon tuto sur ce genre de manipulation de chaîne comprehensible par un novice ?
Encore merci...

Posté : 01 nov. 2007, 01:32
par bibe83
J'abuse un peu encore...
Comment extraire de la chaine traduite 2 sous chaines :
"Le Lapin Qui Dance" et "Dance La Polka" ?
merci

Posté : 01 nov. 2007, 02:38
par h0_noMan
tu fais un explode() de ta chaine pour la parenthese ouvrante.

Posté : 01 nov. 2007, 10:54
par @rthur
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

Posté : 07 nov. 2007, 00:50
par bibe83
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...

Posté : 07 nov. 2007, 12:14
par Ripat
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.

Posté : 09 nov. 2007, 22:21
par bibe83
Terrible !
Merci...
Allez je me lance avec une certaine apprehension dans les liens..
Encore merci

Posté : 09 nov. 2007, 22:28
par zeus
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 !!! ;)