IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

regex pour supprimer l'indentation du code [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 68
    Points
    68
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <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.

  2. #2
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    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 :

    /<\/*>[\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

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 68
    Points
    68
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $pattern = "/<\/*>[\s\t\n]<*>/";
    $xmlContent = preg_replace($pattern, '', $xmlContent);
    et ça ne change rien j'ai toujours des espaces entre les balises.

  4. #4
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    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

  5. #5
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         <div id="mon_id">       <h2> h2 c'est géniale </h2>
    <div id="mon_super_div"> ....
    Dans Motif#1 met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #(?:(?:(^|>[^<]*?)[\t\s\r\n]*)|(?:[\t\s\r\n]*(<|$)))#
    Dans Motif pour le replace met
    Et fait "Envoyer".

  6. #6
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 68
    Points
    68
    Par défaut
    $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

  7. #7
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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]*(<|$))
    )

  8. #8
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 68
    Points
    68
    Par défaut
    l'espace recalcitrant vient de &#160;
    lors de la transformation XSLT &#160; devient l'equivalent de &nbsp; (soit un espace)...c'est pas bien grave.

    Merci beaucoup pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Recherche regex pour supprimer une class
    Par shughen dans le forum Langage
    Réponses: 2
    Dernier message: 08/06/2011, 15h36
  2. regex pour supprimer une ligne commençant par une lettre
    Par stpaul04 dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 03/02/2011, 22h04
  3. [RegEx] Regex pour supprimer les balises <input>
    Par chris0938 dans le forum Langage
    Réponses: 4
    Dernier message: 07/06/2010, 16h07
  4. [RegEx] Regex pour supprimer tous les caractères répétés
    Par deadc0de dans le forum Langage
    Réponses: 8
    Dernier message: 25/11/2009, 08h25
  5. [DOM] REGEX pour supprimer des spans
    Par Tchupacabra dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/10/2008, 10h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo