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 :

Gestion de expressions imbriquées au sein d'une chaîne


Sujet :

Langage PHP

  1. #1
    Membre régulier

    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : Juin 2011
    Messages : 81
    Points : 89
    Points
    89
    Billets dans le blog
    2
    Par défaut Gestion de expressions imbriquées au sein d'une chaîne
    Bonsoir,

    Cette question au sujet de la gestion de chaines lorsque celles-ci sont imbriquées.

    Dans un cas comme celui ci-dessous, la première des deux chaînes contient une unique expression, tandis que la deuxième contient deux expressions à attraper, puis transformer :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $contenuStr= array ("Le moteur de recherche <a href="http://google.fr" target="_blank">Google</a>, qui a donné le nom à la société Google","<a href="http://www.developpez.com/actu/73416/Windows-9-Microsoft-presente-officiellement-un-apercu-du-Menu-Demarrer/" target="_blank">developpez.com</a>, Copyright © 2000-2014 - <a href="http://www.developpez.com" target="_blank">www.developpez.com</a> et <a href="http://php.net/manual/en/function.preg-match.php" target="_blank">preg_match — Perform a regular expression match</a>.");
    Pour attraper, puis transformer, la fonction suivante est utilisée :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	function testPreg($contenuStr) {	
    		$code = "`\<a href="http://(&#39;http://[a-z0-9._/-" target="_blank">+')\](.+)\</a>`i";
    		$traduction = '<a href=$1>$2</a>';
    		return preg_replace($code,$traduction,$contenuStr);
    }
    Le traitement de la première chaîne se déroule bien, contrairement à la seconde, qui n'affiche pas le résultat escompté.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    	print'<p>'.testPreg($contenuStr[0]).'</p>'; print'<p>'.testPreg($contenuStr[1]).'</p>';
    Affiche ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Le moteur de recherche Google, qui a donné le nom à la société Google
     
    developpez.com[ /url ], Copyright © 2000-2014 - <a href="http://www.developpez.com" target="_blank">www.developpez.com</a> et [ url='http://php.net/manual/en/function.preg-match.php']preg_match — Perform a regular expression match.
    Du coup, existe-t-il un moyen d'imbriquer deux ou plusieurs expressions au sein d'une même chaîne, sans passer par un compteur ?

    D'avance, je vous remercie

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Bonjour.
    Sans parler de code que voulez vous faire exactement ???....
    Cette question au sujet de la gestion de chaines lorsque celles-ci sont imbriquées.
    C'est quoi des chaines imbriquées ?... Nie rozumiem!...

  3. #3
    Membre régulier

    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : Juin 2011
    Messages : 81
    Points : 89
    Points
    89
    Billets dans le blog
    2
    Par défaut
    Dziękuję iakou,

    Ici, cela signifie une chaine avec deux fois la séquence [foo='foo']Foo[/foo].
    Donc une séquence à attraper deux fois, dans une seule chaîne :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    var $str = "[foo='1_foo']1_Foo[/foo] & [foo='2_foo']2_Foo[/foo]";


    Ainsi, pour chaque occurrence, une transformation de ce type :

    [foo='1_foo']1_Foo[/foo] -> <foo='1_foo'>1_Foo</foo>
    [foo='2_foo']2_Foo[/foo] -> <foo='2_foo'>2_Foo</foo>

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Toujours pas sur la même longueur d'ondes !

    Reprenons votre exemple avec le tableau contenant des segments de texte et des liens divers.
    Apparemment c'est de l'HTLM qui a été découpé. Non ?...
    J'ai édité la phrase complète via une page HTML, elle ne veut rien dire du tout !
    Que voulez vous faire de ces segments HTML.

    Bon dimanche.

  5. #5
    Membre régulier

    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : Juin 2011
    Messages : 81
    Points : 89
    Points
    89
    Billets dans le blog
    2
    Par défaut
    Désolé et merci pour l'attention portée à cette situation.

    Effectivement, il s'agit d'HTML. Exemple, la séquence suivante :

    " Le moteur de recherche Google, qui a donné le nom à la société Google..."

    Devient :

    Le moteur de recherche <a href=google.fr>Google</a>, qui a donné le nom à la société Google...

    Après être passée par cette fonction :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	function testPreg($contenuStr) {	
    		$code = "`\<a href="http://(http://[\w._/-" target="_blank">+)\](.+)\</a>`i";
    		$traduction = '<a href=$1>$2</a>';
    		return preg_replace($code,$traduction,$contenuStr);
    }

    Par contre, cette fonction ne fonctionne pas avec plus d'une occurrence de type : [ url = foo.fr ] Foo [ /url ].

    Dans le cas d'une chaîne ainsi constituée :

    "developpez.com, Copyright © 2000-2014 - www.developpez.com et preg_match — Perform a regular expression match".


    Cela donne ceci : developpez.com[/url], Copyright © 2000-2014 - www.developpez.com et [url='http://php.net/manual/en/function.preg-match.php']preg_match — Perform a regular expression match.


    J'imagine que cette situation s'explique par l'affectations des variables $1 et $2 et me demande du coup s'il est possible de traiter des chaînes avec plus d'une occurrence de type [ url = foo.fr ] Foo [ /url ].

    De même, bon dimanche.

Discussions similaires

  1. Expression régulière de contrôle d'une chaîne de caractères
    Par ahmedpa dans le forum Général Java
    Réponses: 7
    Dernier message: 19/05/2014, 17h25
  2. [PowerShell] Gestion du cmdlet Get-QADGroupMember au sein d'une boucle
    Par ovcrash dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 29/04/2010, 19h25
  3. Réponses: 12
    Dernier message: 08/08/2008, 11h03
  4. [RegEx] Supprimer caractères invisibles au sein d'une chaîne
    Par webrider dans le forum Langage
    Réponses: 9
    Dernier message: 19/04/2007, 11h07
  5. [Mail] gestion de tache au sein d'une entreprise
    Par mikees dans le forum Langage
    Réponses: 3
    Dernier message: 27/06/2006, 16h43

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