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 19/02/2008, 16h05   #1
Membre Expert
 
Avatar de Janitrix
 
Inscription : octobre 2005
Messages : 3 398
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3 398
Points : 2 331
Points : 2 331
Par défaut Retrouver les liens relatifs

Bonjour,

Je cherche un moyen de récupérer tous les liens relatifs dans une page. J'ai fait une regex mais elle ne semble pas fonctionner :
Code :
eregi('href="/[a-zA-Z0-9_]*/"', $file, $links);
Je cherche à récupérer tous les liens de type relatifs dans un tableau mais je suis un peu paumé là. eregi est-elle la bonne fonction ? La regex est-elle correcte ?

Merci.
Janitrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2008, 16h39   #2
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 140
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 140
Points : 2 885
Points : 2 885
dans un tableau :
1 - commencer par parcourir les différentes occurences du tableau
2 - vérifier l'existence de href="http:// dans les liens, suite à quoi on peut dire que ces liens sont absolus
3 - tous les autres liens sont relatifs

Code :
1
2
3
4
5
6
7
8
9
 
$relative_links[0] = "";
for($i=0;$i<count($links);$i++;)
     {
     if(!eregi('href="http://',$links[$i])
             {
              $relative_links[$i] = $links[$i];
             }        
     }
En gros à partir du moment ou dans ta balise a tu n'as pas http:// c'est que le lien pointe vers une url relative.
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2008, 17h05   #3
Membre Expert
 
Avatar de Janitrix
 
Inscription : octobre 2005
Messages : 3 398
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3 398
Points : 2 331
Points : 2 331
Je n'ai pas de tableau avec les liens, je n'ai que le code de la page. Ile me faut d'abord récupérer ces liens. Je pensais pouvoir récupérer directement tous les liens relatifs avec une regex. Il me semble qu'avec une fonction comme eregi, je peux trouver tous ces liens puis les récupérer dans un tableau. C'est à ça qu'elle sert non ? De plus, j'ai quelques problèmes pour former cette regex.

Merci.
Janitrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2008, 17h15   #4
Membre éprouvé
 
Développeur Web
Inscription : avril 2005
Messages : 395
Détails du profil
Informations personnelles :
Âge : 28

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2005
Messages : 395
Points : 479
Points : 479
Salut,

Je suppose que tu as déjà le code pour récupérer le code d'une page ?
En d'autre terme, as-tu le flux html à parser ?
__________________
Zend PHP5 Certification
MySQL 4 Core Certification
Gats est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2008, 17h20   #5
Membre Expert
 
Avatar de Janitrix
 
Inscription : octobre 2005
Messages : 3 398
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3 398
Points : 2 331
Points : 2 331
oui j'ai utilisé file_get_contents, pas de problème de ce côté
Janitrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2008, 18h26   #6
Membre éprouvé
 
Développeur Web
Inscription : avril 2005
Messages : 395
Détails du profil
Informations personnelles :
Âge : 28

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2005
Messages : 395
Points : 479
Points : 479
Code :
1
2
3
4
5
6
7
8
9
10
$subject = file_get_contents($file);
 
$pattern = '`href="([^#]*?)(?<!http)"`i';
 
 $arRelativeLinks = array();
preg_match_all($pattern, $subject, $matches);
{
	foreach($matches[1] as $link)
	 $arRelativeLinks[] = $link;
}
ps : j'ai exclu les liens de type href="#"
__________________
Zend PHP5 Certification
MySQL 4 Core Certification
Gats est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2008, 20h13   #7
Membre Expert
 
Avatar de Janitrix
 
Inscription : octobre 2005
Messages : 3 398
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3 398
Points : 2 331
Points : 2 331
Parfait merci

Ton code est bon, tu devrais le proposer pour les sources de regex

Si tu es d'accord, c'est là que ça se passe

Merci encore
Janitrix 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 03h12.


 
 
 
 
Partenaires

Hébergement Web