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 :

transformer url en lien avec regex [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 50
    Par défaut transformer url en lien avec regex
    Bonjour, a tous,
    Aprés avoir crus réussir une expréssion régulière ... je me suis aperçu que ca clocher dans certains cas. Je pense qu'il y a des concepts dans les expressions régulière que je n'ai pas saisie ...

    Mon problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //EXEMPLE 1 (ca fonctionne, le lien est bien présent et $1 & $2 au bon endroit)
    $s_input = ''[[]http://www.google.fr titre[/]]
    $s_input = preg_replace('#\[\[\](http.*) (.*)\[/\]\]#',"<a href='$1' title='$2'>$2</a>", $s_input);
     
    //EXEMPLE 2 La le lien a la mauvaise adresse http://www.google.fr titre>google</a>
    $s_input = ''[[]http://www.google.fr titre google[/]]
    $s_input = preg_replace('#\[\[\](http.*) (.*)\[/\]\]#',"<a href='$1' title='$2'>$2</a>", $s_input);
    pour le cas qui bug (le 2ème) je ne comprend pas pourquoi
    (http.*) = mon url
    suivit d'un espace et de (.*) donc tous les caractères jusqu'à rencontrer [/]].
    Alors jpense que ma logique doit etre tordu car j'ai l'impression que le (.*) ne prend pas en compte les espaces ou jsais pas car d'en d'autre cas j'ai l'impression que c'est le | qu'il prend pas en compte et d'en d'autre cas le > bref ...

    Voila merci a ceux qui porterons un peu d'attention a ce poste, j'ai poster une autre question dans le même genre avec titre.
    Je pense qu'il me manque quelques choses car a chaque fois que je me tente aux expressions régulières, ya toujours quelques choses qui cloche.

    Bon code a tous

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Par défaut
    Salut salut,

    Bon, je ne sais pas vraiment si c'est ce que tu veux mais si j'ai bien compris ton problème, voici quelque chose qui fonctionne. Je ne pense pas que la regex soit optimisée, on peut sans doute faire mieux mais en attendant, elle fonctionnera.

    #\]([^ ]*) ([^\[/\]]*)#

    Le "[^ ]*" sert à dire que tu sélectionnes tout ce qui est après le ] jusqu'à ce qu'il y ait un espace.
    Ensuite, on cherche un espace (celui entre les deux parenthèses capturantes)
    et le "[^\[/\]]*" veut dire qu'on sélectionne tout ce qui entre l'espace et le [/]
    Voilà j'espère que c'est ce que tu voulais =)

    Bonne soirée

    P.S : j'utilise toujours cet outil pour faire mes regex
    http://www.lumadis.be/regex/test_regex.php
    C'est pas le meilleur (y'a regex buddy qui est super mais payant) mais il y a un assez bon tuto en français quand on comprend pas l'anglais sinon y'a ce site http://www.regular-expressions.info/

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 50
    Par défaut
    Merci pour ta réponse rapide ca fonctionne presque pour mon cas sauf que les crochets reste, ca me donne : <a href="http://wwW.google.fr>[[lol lol test[/]]</a>. en tt cas cool tes explications Merci.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 50
    Par défaut
    Re en lisant la réponse d'une autre question que j'ai posé j'ai vu que dans les réponses données on répété une condition dans le regex alors j'ai fait pareil pour celle que tu ma donné et je n'ai plus les crochets.
    Le résultat :
    #\[\[\]([^ ]*) ([^\[/\]]*)(\[/\]\]*)# ce qui est en gras a etait rajouté pour virer les crochets de fin qui restés, est ce que c'est normal est ce que c'est bon ?
    Merci

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Par défaut
    Oui oui c'est normal que cela fonctionne car en fait ce que je t'avais passé fonctionnait dans le cas d'un preg_match mais je n'ai pas pensé à tester avec un preg_replace.
    Par contre, petit conseil, utilise plutôt celle-ci :
    \[\[\]([^ ]*) ([^\[/\]]*)\[/\]\]

    Regarde ceci :
    http://lumadis.be/regex/test_regex.php?id=359

    Comme tu peux le voir la deuxième est plus rapide, certes, de pas grand chose mais elle l'est.
    Pourquoi ? Tout simplement parce que j'ai changé ça (\[/\]\]*) en \[/\]\].
    Ce que tu avais fait c'est que tu avais mis des parenthèses "capturantes" qui bouffent un peu plus de mémoire alors que tu n'en as pas besoin (ton but n'étant pas de capturer les [/]]).
    Regarde ce passage : http://www.lumadis.be/regex/tuto_pcr...ucesParenthese

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 50
    Par défaut
    a oué, grand merci pour les explications claires et le pti conseil. Bonne continuation a toi.

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

Discussions similaires

  1. [API HTML5] SCEditor transformer URLs en liens lors de la frappe
    Par GrouPages.fr dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 11/06/2013, 12h09
  2. [MySQL] Lien avec variable dans l'URL
    Par mikael2235 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/01/2010, 09h33
  3. lien avec url?
    Par skorpio dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/07/2007, 10h07
  4. Comment extraire une partie d'URL avec REGEX?
    Par STB_Fk dans le forum Langage
    Réponses: 2
    Dernier message: 24/01/2007, 13h59
  5. [RegEx] Problème pour transformer les url en liens cliquable
    Par AlphaYoDa dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2006, 14h54

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