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 :

Trouver les tag parent de plus haut niveau [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut Trouver les tag parent de plus haut niveau
    Bonjour,

    Je cherche à placer les mots Début et Fin dans une chaine de caractere avant et après les balises quotes, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Début[quote ]ma citation...[/quote]Fin
    J'arrive à faire ceci avec ces regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $msg = preg_replace('/\[quote\]/','Début[quote ]', $msg);
    $msg = preg_replace('/\[\/quote\]/', '[/quote]Fin', $msg);
    Le probleme c'est que si j'ai plusieurs balises quote imbriqué je me retrouve avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Début[quote ]ma citation Début[quote ]ma citation imbriqué[/quote]Fin[/quote]Fin
    Alors que je voudrais si plusieurs quotes sont imbriqué : (un seul Début et Fin sur les 1ère balises)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Début[quote ]ma citation [quote ]ma citation imbriqué[/quote][/quote]Fin
    Et si plusieurs quotes ne sont pas imbriqué, cela devrais donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Début[quote ]ma citation [quote ]ma citation imbriqué[/quote][/quote]Fin  Début[quote ]ma citation[/quote]Fin
    Existe t il un moyen de faire ça ?

    Merci

  2. #2
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Histoire de simplifier un peu les choses :

    Je cherche une regex en gros qui va identifier les tag parent de plus haut niveau, par exemple sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    echo htmlentities(preg_replace(
    		'???', 
    		'test', 
    		'<tr></tr>
    		<tr>
    			<tr></tr>
    			<tr></tr>
    		</tr>
    		<tr>
    			<tr>
    				<tr></tr>
    			</tr>
    		</tr>'
    	));
    // Doit afficher : test test test
    A l'inverse, j'ai trouvé une regex qui permet d'identifier les tag enfant de plus bas niveau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    echo htmlentities(preg_replace(
    		'/<tr>(([^<]*)|(<(?!tr)))+<\/tr>/', 
    		'test', 
    		'<tr></tr>
    		<tr>
    			<tr></tr>
    			<tr></tr>
    		</tr>
    		<tr>
    			<tr>
    				<tr></tr>
    			</tr>
    		</tr>'
    	));
    // Affiche : test <tr>  test test </tr>  <tr>  <tr>  test </tr>  </tr>

  3. #3
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Bonjour,

    Je chercherais une piste du côté de l'exemple #3 de cette page : http://fr.php.net/manual/fr/function...e-callback.php

  4. #4
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    J'ai tenté ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    $str = "[quote ]ma citation [quote ]ma citation imbriqué[/quote][/quote][quote ]autre[/quote][quote ]last [quote ]imbrication[/quote][/quote]";
    $reg = '#(\[quote ]((?:[^[]|\[(?!/?quote])|(?R))+)\[/quote])#';
    print preg_replace($reg, 'debut$1fin'."\n", $str);

  5. #5
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    wow c'est presque ça sauf qu'il place le mot fin des la premiere balise [/quote] qu'il trouve.

    Je sais pas si c'est possible mais il faudrait dire que si à l'interrieur du [quote ] il retrouve un autre [quote ] alors il faut qu'il y ai un [/quote] avant d'atteindre le [/quote] que l'on cherche

  6. #6
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Bah non, chez moi il se comporte correctement.

    Je te redonne le code en éclaté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $str = "[cote]ma citation [cote]ma citation imbriqué[/cote][/cote][cote]autre[/cote][cote]encore [cote]une imbrication[/cote] finie[/cote]";
    $reg = '#
            (
            \[cote\] 
            ( (?: [^[] | \[(?!/?cote\] ) | (?R))+ )
            \[/cote\]
            )#x';
     
    print preg_replace($reg, 'debut$1fin'."\n", $str);
    J'ai remplacé par cote pour éviter la mise en page auto

    Code affichage obtenu : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    debut[cote]ma citation [cote]ma citation imbriqué[/cote][/cote]fin
    debut[cote]autre[/cote]fin
    debut[cote]encore [cote]une imbrication[/cote] finie[/cote]fin

  7. #7
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    ça marrrcheeeeee !!!!!!!!!!!!!!!!

    merciii !!



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

Discussions similaires

  1. Marché du PC : les ventes atteignent leur plus bas niveau depuis 2009
    Par Hinault Romaric dans le forum Actualités
    Réponses: 28
    Dernier message: 16/04/2015, 14h10
  2. Réponses: 0
    Dernier message: 16/09/2013, 15h21
  3. Réponses: 0
    Dernier message: 28/04/2011, 16h11
  4. Réponses: 26
    Dernier message: 01/10/2010, 17h38
  5. Réponses: 2
    Dernier message: 03/01/2008, 20h47

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