Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Invité régulier
    Inscrit en
    février 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 50
    Points : 7
    Points
    7

    Par défaut chaine commencant par X et qui fini par Y

    Bonjour,

    Comment trouver dans une chaîne, une sous chaîne qui commence par ... et se termine par ... ?

    J'ai essayé les 2 solution suivante sans résultats :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    $contents="<span>Lorem</span> ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna 
    aliquyam erat, sed diam voluptua.";
     
    echo(eregi_replace("<span>.</span>","<span style='background: green'>\\1</span>",$contents));
    echo('<br />')
    echo(eregi_replace("(^<span>)(</span>$)","<span style='background: yellow'>\\1</span>",$contents));

    Mercdi d'avance.

  2. #2
    Membre éclairé Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    mai 2003
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : mai 2003
    Messages : 413
    Points : 399
    Points
    399

    Par défaut

    Bonjour,
    Tu n'etais pas loin !
    Code :
    1
    2
    3
    4
    5
    6
    7
     
    <?
    $contents="<span>Lorem</span> ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna 
    aliquyam erat, sed diam voluptua.";
     
    echo(eregi_replace("<span>(.+)</span>","<span style='background: green'>\\1</span>",$contents));
    ?>
    Et j'obtiens le surlignage de Lorem

    S.
    http://www.noctinfo.fr/

    (\ _ /)
    (='.'=) Voici Lapinou. Aidez-le à conquérir le monde en le reproduisant.
    (")-(")

  3. #3
    Invité régulier
    Inscrit en
    février 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 50
    Points : 7
    Points
    7

    Par défaut

    Je n'arrive pas à comprendre pourquoi le code suivant ne fonctionne pas :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
    	<title></title>
    </head>
    <body>
     
    <?php
    ob_start();
    // tout ton code PHP, renvoi de HTML, ....
    ?>
     
    <span>Lorem</span> ipsum <a href='#'>dolor</a> sit amet, <span>consetetur sadipscing elitr</span>, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna 
    aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus 
    est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et 
    dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, 
    no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor 
    invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd 
    gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
     
    <?php
    $contents = ob_get_contents();
    ob_end_clean();
     
    $mot='dolor';
    $contents1=eregi_replace("($mot)","<span style='background: green'>\\1</span>",$contents);
    $contents2=eregi_replace("($mot)[^(<span>(.*)</span>)]","<span style='background: yellow'>\\1</span>",$contents);
    $contents3=eregi_replace("($mot)[^(<a href='#'>(.*)</a>)]","<span style='background: yellow'>\\1</span>",$contents);
     
    echo($contents1);
    echo('<hr />');
    echo($contents2);
    echo('<hr />');
    echo($contents3);
    echo('<hr />');
    ?>
     
    </body>
    </html>
    Dans l'affichage contents2, des lettres disparaissent mystérieusement.
    Dans l'affichage contents3, cela ne fonctionne pas !!!

    Je n'arrive pas à trouver les erreurs...

    Merci d'avance.

  4. #4
    Invité régulier
    Inscrit en
    février 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 50
    Points : 7
    Points
    7

    Par défaut

    Personne n'a une solution à me proposer ?

    Pour compléter la demande voici le but de mon projet :

    Avant d'envoyer une page dynamique, je balaye le code html (bufférisé) afin de rechercher certains mots dans la page qui serait référencés dans un dictionnaire.
    Si Je trouve un tel mot, je voudrais lui assigner un lien vers le dico (en un mot l'encadrer d'une balise <a href="...">...</a>). Le problème c'est qu'il faut que je ne traite pas les mots qui sont déjà entre des balises <a></a> sinon il y aura une double imbrication. De même je ne dois pas extraire les mots dans une balise (img src="..."... /> car si le mot cherché se trouve dans sr="...", cela va poser des problèmes.
    Cela me semble pas si compliqué que cela, et je pensais m'en sortir avec les expressions régulières, plutôt que de parser le code en XML.
    Bon en espérant avoir été claire... si quelqu'un a une solution à me proposer.
    Merci d'avance !

  5. #5
    Membre Expert

    Homme Profil pro
    Inscrit en
    janvier 2004
    Messages
    1 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : janvier 2004
    Messages : 1 244
    Points : 1 505
    Points
    1 505

    Par défaut

    Citation Envoyé par oamram
    Code :
    eregi_replace("($mot)[^(<span>(.*)</span>)]",...
    Ca ne fonctionne absoluement pas comme ca !

    1ere chose : passer a preg_replace. La syntaxe te paraitra peut etre plus étrange, mais c'est beaucoup mieux (plus rapide) et surtout tu as acces a des modifications d'expressions qui te seront necessaires ici pour gerer les balises imbriquées

    Ensuite, si tu veux recuperer ce qui est contenu entre 2 balises, il faut faire qqchose comme :

    Code :
    ... = preg_replace("#<balise>([^<]+)</balise>#U", ..., ...);

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •