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 :

Extraction chaîne selon délimiteur connu [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 98
    Par défaut Extraction chaîne selon délimiteur connu
    Bonjour,

    je me fais des noeuds au cerveau sur une regex pourtant à priori pas si compliqué. J'ai trouvé une solution boiteuse . Je fais donc appel à vos connaissances pour m'aider à faire mieux. Si ce n'est pas possible tant pis

    Je reçois une chaine contenant x URL. La seule chose dont je suis sûr est que chacune commence par http://.

    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://monurl.comhttp://monurl.com2http://monurl.com3http://monurl.com
    La solution PHP de base aurait été de faire un split selon la séquence 'http://' et de reconstruire mes URLs.

    Ma solution RegEx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (http://(.*?))(?:http://)
    En gros ce quelle fait est d'extraire la chaîne "http://monurl.comhttp://" et avec le jeu des parenthèses capturantes, je récupère l'URL, mais :
    1- je trouve ça moyen
    2- la dernière URL n'est pas prise en compte puisqu'il n'y a pas de http:// qui suit.

    Mon problème est plus général. Je n'arrive à dire que la fin d'une chaîne est une chaîne exclue. Ce que je fais très bien avec un caractère via ce genre de syntaxe : [^;] (tout sauf un

    merci
    Cordialement

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonjour,

    Citation Envoyé par kileak Voir le message
    Je reçois une chaine contenant x URL.
    de quelle forme cette chaine ? Un exemple ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 98
    Par défaut
    Citation Envoyé par Madfrix Voir le message
    Bonjour,
    de quelle forme cette chaine ? Un exemple ?
    Oui, comme dis initialement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://monurl.comhttp://monurl.com2http://monurl.com3http://monurl.com
    on ne peut pas se baser sur ce qu'il y a derrière le http:// pour déterminer la fin.
    La fin d'une URL est donc soit le dernier caractère avant le http:// suivant, soit la fin de la chaine.

    merci


    EDIT :
    je pense que c'est rapé. J'ai continué mes recherches web et essais avec Expresso et je suis tombé là dessus :

    http://www.velocityreviews.com/forum...p-pattern.html

    Dans la première réponse, Alan Moore nous dit :
    Unfortunately, regexes don't provide a way to not-match specific
    sequences of characters
    , but through creative use of lookaround and
    negated character classes, we can usually manage it. Try this:
    C'est exactement ce que je veux faire. Ensuite il propose une regex pour Victor qui fonctionne (je l'ai testée). La seule différence avec ce que mon cas, mais elle est de taille (!!), c'est que lui à un caractère de fin qui est le ].

    End of the story

    Je laisse ce topic ouvert car je n'ai pas trouvé ma réponse mais en attendant, je pense partir sur un split php sur la séquence http://.

    Bon aprem

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 98
    Par défaut
    Un cri dans la nuit
    J'ai trouvé

    J'espère que ça en aidera plus d'un.

    Chaîne exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://monsite1.com/toto.asphttp://monsite2.com/http://monsite3.com/image.jpghttp://monsite4.com/dir/file.php
    Regexp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(http://.*?(?=http://|$))+
    Explication :
    l'astuce consiste à sélectionner http:// suivi de n'importe quel caractère, sans limite de répétition mais le moins fois possible (.*?).
    Suivi d'un http:// ou de la fin de ligne.

    Dans ce cas il suffira de boucler sur les 4 occurrences du tableau généré pour avoir les 4 URLs et ainsi choisir celle que l'on veut simplement.

    A bientôt

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

Discussions similaires

  1. [Shell] Extraction chaîne caractère
    Par tonio45312 dans le forum Linux
    Réponses: 4
    Dernier message: 29/05/2008, 09h45
  2. Extraction chaîne numérique
    Par ALEXM dans le forum Access
    Réponses: 4
    Dernier message: 29/06/2007, 22h17
  3. Taille de chaîne selon taille de textField
    Par BnA dans le forum Flash
    Réponses: 3
    Dernier message: 31/05/2007, 21h28
  4. extraction chaîne + update
    Par jeanluc065 dans le forum Access
    Réponses: 4
    Dernier message: 17/12/2006, 09h16
  5. Extraction Chaîne de Caractères
    Par adriano057 dans le forum Access
    Réponses: 5
    Dernier message: 19/07/2006, 16h55

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