Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/11/2010, 09h43   #1
Membre du Club
 
Inscription : juin 2003
Messages : 83
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 83
Points : 47
Points : 47
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 :
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 :
(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
kileak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 10h26   #2
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Bonjour,

Citation:
Envoyé par kileak Voir le message
Je reçois une chaine contenant x URL.
de quelle forme cette chaine ? Un exemple ?
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 12h05   #3
Membre du Club
 
Inscription : juin 2003
Messages : 83
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 83
Points : 47
Points : 47
Citation:
Envoyé par Madfrix Voir le message
Bonjour,
de quelle forme cette chaine ? Un exemple ?
Oui, comme dis initialement :
Code :
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 :
Citation:
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
kileak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 16h42   #4
Membre du Club
 
Inscription : juin 2003
Messages : 83
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 83
Points : 47
Points : 47
Un cri dans la nuit
J'ai trouvé

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

Chaîne exemple :
Code :
http://monsite1.com/toto.asphttp://monsite2.com/http://monsite3.com/image.jpghttp://monsite4.com/dir/file.php
Regexp :
Code :
^(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
kileak est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h02.


 
 
 
 
Partenaires

Hébergement Web