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 :

Regex urls relatives et absolues


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Regex urls relatives et absolues
    Bonjour à tous,

    je m'arrache les cheveux sur une regex.
    Dans le cadre d'un url rewriting, j'aimerais réécrire les urls des liens contenus dans mes pages, en urls "propre".
    Je parse donc ma page avec php avant de l'afficher.
    J'aimerais ne sélectionner que les urls relatives et les absolues qui pointent sur le domaine...

    donc les urls commençant par:

    http://www.mondomaine.com/mapage.php?mesvariables
    http://mondomaine.com/mapage.php?mesvariables
    www.domaine.com/mapage.php?mesvariables
    /mapage.php?mesvariables
    mapage.php?mesvariables

    D'abord est-ce possible dans une seule regex ? je commence à croire que non...

    Pour l'instant j'ai fait cette regle :

    #<a(.+)href="(?(?=www)(www\.mondomaine\.fr))/?(.+)\.php\?([A-Za-z0-9\-_=&;]*)"([^>]*)>(.+)</a>#Usi

    En fait il faudrait que si "www" ou "http://" ou "http://www" est trouvé, il soit suivi de "mondomaine.fr"

    J'ai du mal avec les assertions... ça ne fonctionne pas

    Un peu d'aide serait bienvenue

    Meci

  2. #2
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    #(((?:http://)?(?:www\.)?mondomaine\.(?:com|fr))?/)?[^.]+\.php\?[a-z0-9\-_=&;]*"[^>]*>[^<]+</a>#Usi


    Dans tes exemples:

    http://www.mondomaine.com/mapage.php?mesvariables
    http://mondomaine.com/mapage.php?mesvariables
    www.domaine.com/mapage.php?mesvariables
    /mapage.php?mesvariables
    mapage.php?mesvariables

    le troisième est domaine.com au lieu de mondomaine.com

    Ça peut expliquer tes difficultés (?)

    Remarque:
    (?:http://)?(?:www\.)?mondomaine
    matchera avec
    http://mondomaine
    www.mondomaine
    htt
    p//www.mondomaine
    mondomaine

    alors que dans tes exemples il n’y a pas

    mondomaine.com/mapage.php?mesvariables



    Si tu mets i comme option, pourquoi écrire A-Za-z dans la classe ?

    Tu mets aussi l’option s: le point a-t-il vraiment besoin de matcher des fins de lignes ?

    Chaque fois qu’on le peut, il vaut mieux utiliser [^....] plutôt que .+? ou .+ avec U. Dans certains cas particuliers, il m’est arrivé que .+? matche plus loin que je ne le voulais.


    À moins que tu veuilles vraiment définir des groupes, les ( ) autour de .+ et [^>]* ne sont pas nécessaires.

    De même il faut mettre ?: au début d’un parenthésage pour empêcher d’en faire un groupe.

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Salut,

    merci pour la réponse et les conseils d'optimisation, cela fonctionne bien.

    domaine.com est une erreur de saisi uniquement dans le post.
    Les groupes sont importants car je reconstrui l'url en ajoutant des mots, et un title dans la balise, il me faut capturer les caractères à l'intérieur de la balise.

    Au final, voici la règle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #<a([^.]+)?href="(?:(?:(?:<a href="http://)?(?:www\.)?mondomaine\.(?:com|fr))?/)?(" target="_blank">http://)?(?:www\.)?mondomaine\.(?:com|fr))?/)?(</a>[^.]+)\.php\?([a-z0-9\-_=&;]*)"([^>]*)>([^<]+)</a>#Usi
    Merci encore

    A+

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/08/2013, 19h07
  2. [RegEx] Regex url absolue
    Par nox73 dans le forum Langage
    Réponses: 1
    Dernier message: 31/01/2011, 16h28
  3. Réponses: 0
    Dernier message: 27/08/2010, 10h26
  4. Question existentielle : URL absolue vs. URL relative
    Par Bensor dans le forum Général Conception Web
    Réponses: 5
    Dernier message: 16/12/2008, 11h14
  5. [URL] url relative et absolue
    Par K-Kaï dans le forum Servlets/JSP
    Réponses: 17
    Dernier message: 21/07/2006, 10h48

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