Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/08/2007, 10h33   #1
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 157
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 157
Points : 34
Points : 34
Par défaut regex pour supprimer l'indentation du code

salut,
j'aurais besoin d'un petit coup de main pour supprimer l'indentation du code avec ereg_replace

J'ai du code:
Code :
1
2
<div id="mon_id">       <h2> h2 c'est géniale </h2>
<div id="mon_super_div"> ....
j'ai merais que ça fasse:
Code :
<div id="mon_id"><h2>h2 c'est géniale</h2><div id="mon_super_div"> ....
que ça supprime tout espace ou retour chariot avant '<' et après '>'
quel doit être le pattern pour pouvoir l'utiliser avec ereg_replace?

merci.
cassy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 11h25   #2
Membre émérite
 
Avatar de panda31
 
Homme Michaël
Conseil - Consultant en systèmes d'information
Inscription : juin 2003
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : juin 2003
Messages : 673
Points : 850
Points : 850
Tu veux supprimer espaces, indentations, retours chariots entre les balises, c'est ça ?
Déjà, je conseille preg_replace plutôt que ereg_replace car c'est plus rapide mais surtout compatible avec les expressions PERL.
ben, ton pattern est de la forme :

Citation:
/<\/*>[\s\t\n]<*>//
Ce pattern va enlever les espaces entre une balises fermante et une ouvrante.

Pour les autres cas, ca me semble plus délicat.

A vérifier toute fois mais je pense que c'est correct.
__________________
Michaël Mary
Consultant PLM dans une société de conseil toulousaine
Auditeur CNAM-IPST depuis septembre 2008
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
John F. Woods
mon cv et mon domaine et mon blog
Aucune question technique par MP, svp
panda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 11h37   #3
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 157
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 157
Points : 34
Points : 34
en gardant ton expression regulière j'ai l'erreur suivante:
Warning: preg_replace() [function.preg-replace]: Unknown modifier '/'

du coup j'ai mis:
Code :
1
2
$pattern = "/<\/*>[\s\t\n]<*>/";
$xmlContent = preg_replace($pattern, '', $xmlContent);
et ça ne change rien j'ai toujours des espaces entre les balises.
cassy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 11h44   #4
Membre émérite
 
Avatar de panda31
 
Homme Michaël
Conseil - Consultant en systèmes d'information
Inscription : juin 2003
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : juin 2003
Messages : 673
Points : 850
Points : 850
Comme je t'ai dit, je suis pas top sur de la syntaxe PHP mais normalement, cea devrait marcher en perl...

Désolé que cela ne fonctionne pas.
__________________
Michaël Mary
Consultant PLM dans une société de conseil toulousaine
Auditeur CNAM-IPST depuis septembre 2008
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
John F. Woods
mon cv et mon domaine et mon blog
Aucune question technique par MP, svp
panda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 12h00   #5
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
Code :
preg_replace('#(?:(?:(^|>[^<]*?)[\t\s\r\n]*)|(?:[\t\s\r\n]*(<|$)))#', '$1$2', $code);
Pour voir son effet simplement, va voir cette page : http://www.lumadis.be/regex/test_regex.php

Dans 'Entrez ici le texte à tester (maximum 1000 caractères)', met ça :
Code :
1
2
     <div id="mon_id">       <h2> h2 c'est géniale </h2>
<div id="mon_super_div"> ....
Dans Motif#1 met
Code :
#(?:(?:(^|>[^<]*?)[\t\s\r\n]*)|(?:[\t\s\r\n]*(<|$)))#
Dans Motif pour le replace met
Et fait "Envoyer".
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 12h24   #6
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 157
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 157
Points : 34
Points : 34
$1$2 c'est l'équivalent de <>...

hésites pas à commenter ton expression regulière pour que je comprenne quelque chose.

Y'a juste un petit bug, j'ai encore un espace récalcitrant.
déjà rien qu'avec \s il aurait du partir...je ne comprends pas
cassy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 13h06   #7
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
Pas exactement non toi tu captures entre 2 balises mais ce n'est pas toujours ENTRE 2 balises. Sa peut etre avant ou apres... Et quel est l'interet de capturer le contenu de la balise <.*?> ? Il n'est pas util ici. Pour ma regex :
Code :
1
2
3
4
5
6
7
8
// Soit l'un soit l'autre
(?:
    // Début du code ou > suivit d'un nombre quelconque de caractères (exceptés le <) suivi par des espaces. A remplacer par $1
    (?:(^|>[^<]*?)[\t\s\r\n]*)
|
    // Suite d'espace suivi de < ou la fin du code. A remplacer par $2
    (?:[\t\s\r\n]*(<|$))
)
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 14h02   #8
Nouveau Membre du Club
 
Inscription : mai 2006
Messages : 157
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 157
Points : 34
Points : 34
l'espace recalcitrant vient de  
lors de la transformation XSLT   devient l'equivalent de &nbsp; (soit un espace)...c'est pas bien grave.

Merci beaucoup pour ton aide.
cassy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h11.


 
 
 
 
Partenaires

Hébergement Web