probleme d'Expression reguliere

Discussion dans 'Administration d'un site Web' créé par YvesB, 31 Août 2004.

  1. YvesB

    YvesB WRInaute impliqué

    Inscrit:
    11 Janvier 2004
    Messages:
    517
    J'aime reçus:
    0
    Bonjour, je voudrais mettre au point un regex pour creer un lien au fichier citer dans une chaine , par exemple : sys/mysql.cs config.h <mysql.o> ... Je voudrais prévoir ces 3 type de formatage, et donc aussi plusieurs types d'extension de fichier : .cs .h .o etc

    J'ai essayer de faire un regex mais pas tres concluant :
    Code:
    <? 
    
    $chaine=("essai mysql.dll mysql.h Mysql/mysql.h <mysql.o>");
    $chaine = eregi_replace("([:space:]).+(\..+('dll|h|o|cs'))", "<A HREF=\"\\1\" TARGET=\"_blank\">\\1\\2\\3</A>", $chaine);
    echo $chaine;
    
    ?>
    Si qq pouvait me dire ou j'ai faux :)

    Merci
     
  2. maxttb

    maxttb WRInaute occasionnel

    Inscrit:
    27 Février 2004
    Messages:
    473
    J'aime reçus:
    0
    Pourqoi diable mettre 'dll|h|o|cs' entre quote?
     
  3. YvesB

    YvesB WRInaute impliqué

    Inscrit:
    11 Janvier 2004
    Messages:
    517
    J'aime reçus:
    0
    Ben en faite fo y mettre entre " " dab mais la je sais pas trop comment faire vu qu'il y a deja des " "avant et que je ne suis pas sur pouvoir les enlever :) mais je sais que c une connerie ...
     
  4. maxttb

    maxttb WRInaute occasionnel

    Inscrit:
    27 Février 2004
    Messages:
    473
    J'aime reçus:
    0
    Par ailleurs, \s ne serait t-il pas plus clair que [:space:]
    Je ne comprend pas bien le but de \..+

    A ta place, j'aurais fait ca:

    (([^\s].+)\.(dll|h|o|cs))
    vers
    "<a href=\"\\1\">\\1</a>"

    Tout simplement
     
  5. maxttb

    maxttb WRInaute occasionnel

    Inscrit:
    27 Février 2004
    Messages:
    473
    J'aime reçus:
    0
    Oups!


    (([^\s]+)\.(dll|h|o|cs))
    vers
    "<a href=\"\\1\">\\1</a>"

    Au temps pour moi!
     
  6. YvesB

    YvesB WRInaute impliqué

    Inscrit:
    11 Janvier 2004
    Messages:
    517
    J'aime reçus:
    0
    Ya du mieux mais ca ne prend pas tout le mot dans le lien c bizzare, et aussi, avec ce regex, tu prends en compte les nom de fichier entre <> ? et ceux qui commence par / ?
     
  7. YvesB

    YvesB WRInaute impliqué

    Inscrit:
    11 Janvier 2004
    Messages:
    517
    J'aime reçus:
    0
    Je deviens une bete :) j'ai reussi a modifier ton regex et ca marche parfaitement Merci bcp maxttb !
    Code:
    <? 
    $chaine=("essai mykjhkjql.o klj lkj mysql.h lkj Mysql/mysql.h <mysql.h>");
    $chaine = eregi_replace("(([^[:space:]|\<|\/|\"]+)\.(dll|h|o|cs))", "<A HREF=\"\\1\" TARGET=\"_blank\">\\1</A>", $chaine);
    echo $chaine;
    ?>
     
  8. maxttb

    maxttb WRInaute occasionnel

    Inscrit:
    27 Février 2004
    Messages:
    473
    J'aime reçus:
    0
    De rien.
    Heureux de t'avoir aidé dans le monde palpitant des regex!