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 et $matches [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 21
    Par défaut regex et $matches
    Bonjour,

    Je ne suis pas toujours à l'aise avec les RegEx en général, mais j'ai quand meme fait pas mal de recherches (notamment sur le forum Developpez) et là je seche.

    Je crée un motif pour analyser une URL dans son integralité avec toute la complexité qu'on peut y trouver: le domaine, le chemin, le fichier (avec ou sans extension pour le case d'un Rewrite) ainsi que les variables GET (? et&) et les ancres (#).

    Selon mon analyse d'une url, on peut avoir:
    - une seule fois le domaine, mais d'un format plus ou moins precis, no problem
    - pour le chemin, plusieurs noms de dossier précédés du slash sinon au moins une fois le slash
    - le "fichier", facultatif si on pointe sur "index.truc", avec ou sans extension pour le cas d'un rewrite
    - l'ebauche de la chaine de caractère representant les variables GET


    voici le motif en chantier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $urlreg="/^http(s)?:\/\/(?P<domain>[a-z0-9]+[\.[a-z0-9]+]*\.[a-z]{2,4})(?P<path>(\/[a-z0-9_]*)*\/)(?P<file>[a-z0-9_-\s]+[\.[a-z]{2,4}]?)?(?P<getvars>[\?|\#[a-z0-9_]+=[a-z0-9\%_-~.]+]?]?)"
    Je pense que beaucoup verront mes maladresses concernant les crochets ou parenthèses, des petits conseils ou astuces ne seront pas en trop.

    Je recupere donc les parties de l'url dans un tableau $matches (original non? ) pour eventuellement recuperer ce qui pourrait m'interresser par la suite.

    Alors j'ai plusieurs petits problemes:
    admettons l'URL http://www.test.com/dos1/dir2/test.php
    Déjà, quand il n'y a aucune variable GET, je me retrouve avec $matches[file]=test.ph et $matches[getvars]=p !!?? pourquoi? j'ai beau chercher je ne sais pas. Pareillement, si je ne met aucun non de fichier, j'ai un tableau $matches encore plus embrouillé. Je suis sûr que ça a un rapport avec mes crochets et mes parenthèses mais je ne sais pas QUAND utiliser l'un ou l'autre...
    De plus, si je me contente seulement du nom de domaine, http://www.test.com/ là mon url ne passe pas le test.

    S'il vous plait, aidez moi. Je n'ai pas le niveau de la doc php.net apparemment et je sèche complètement... D'autant que mon motif n'est pas fini, plus j'avance dans le motif, plus je m'embrouille et je reviens en arrière

    D'avance un grand merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2011
    Messages : 16
    Par défaut
    Bonjour,
    Je ne me suis pas penché du tout sur l'expression, mais sais-tu qu'il existe une fonction PHP pour récupérer ces informations ?
    parse_url()

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 21
    Par défaut
    ah non je ne connaissais pas, merci beaucoup, ça va m'etre bien utile

    Cela dit, si je pouvais avoir à l'occasion quelques conseils sur l'utilisation des parenthèses et des crochets. C'est encore très flou pour moi tout ça

    Mais encore plus important, je ne voudrai pas revoir ce problème de "troncage" de chaines de caractères à l'avenir, pour ce petit hic sur test.ph . je suis sur que c'est un problème que je rencontrerai à l'avenir...

    Merci en tout cas, Vagaweb, pour cet élément de réponse qui me fera bien avancer sur les prochains scripts.
    J'avais essayé filter_var mais celui-ci se satisfaisait du "http://".
    au moins, avec parse_url() je vais pouvoir analyser les différents éléments du tableau pour quelques verif de présence en black-list ou autre, c'est un très bon début

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

Discussions similaires

  1. Regex, Non matching
    Par jekixu dans le forum Langage
    Réponses: 3
    Dernier message: 18/03/2013, 20h54
  2. [regex] Automatic Match Variables
    Par ellgafsi dans le forum Langage
    Réponses: 7
    Dernier message: 28/04/2009, 14h55
  3. [RegEx] Regex PCRE : Match un type string
    Par V3lkin dans le forum Langage
    Réponses: 9
    Dernier message: 27/11/2008, 17h51
  4. [Regex] Pattern matching
    Par jeRame dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 26/06/2007, 14h28
  5. [Regex] Matching...
    Par billynirvana dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 18/07/2005, 17h16

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