Saluté...
Je bosse sur un système de moteur de recherche en ce moment. j'essaye d'optimiser tout ça avec des regex... bon l'idée est de pouvoir récupérer tous les liens d'une page depuis son code source ...
le problème est qu'il existe pluiseurs types de liens
ceux commencant
par http
par ./
par ../
par dossier/
par /dossier/
ou ceux étant simplement un nom de fichier
genre <a href="index.php">accueil</a>
ensuite on a les variables passées en get à prendre en compte ...donc tout ce qui suit le nom de fichier et qui commence par un ?
ok ...deja tout ça c'est pas mal ... mais bien sur il faut éviter de prendre les javascript tout en récupérant les liens qui peuvent y être
genre la dedans
Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part <a href="javascript:window.open('pagepopup.php','newsletter_exemple', 'status=yes,resizable=yes,scrollbars=yes,width=610,height=500'); void(0); " onMouseover="document.newsimg.src='http://medias.lemonde.fr/mmpub/img/ep/news-5.jpg';"><b>Titres du jour</b></a> : Du lundi au vendredi, les titres de l'actualité développés sur Le Monde.fr.<br><br>
il faut récupérer pagepopup.php
bon ...j'ai bossé sur une regex qui est pas mal mais qui ne fonctionne pas encore au top
j'aurai besoin d'un coup de main pour la paufiner ... pour mes tests j'utilise le code source de la page "lemonde.fr" qui comporte plein de types de liens ou ue page de tests à moi...
voici ma regex
bon je suis pas un pro des regex mais j'y travaille
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // recuperation de la source $fichier = fopen($_GET['url'], 'r', false); $src = ''; while ($str=fread($fichier, 16)) { $src .= $str; } fclose($fichier); preg_match_all('%(("|\')(http|./|../|/|[a-z0-9]+/)(.+?)(\.html|\.php|\.php3|\.php4|\.php5|\.htm|\/|\.asp)("|\'))|(("|\')([a-z0-9])+(\.html|\.php|\.php3|\.php4|\.php5|\.htm|\/|\.asp)(\?)(.+?)+("|\'))%im', $fichier, $lnk2, PREG_OFFSET_CAPTURE); echo '<textarea rows="20" cols="50" style="width:700px;">'; print_r($lnk2); echo '</textarea>';
ma regex me sort pour l'instant des liens mais avec trop d'options
genre
Code X : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 Array ( [0] => Array ( [0] => Array ( [0] => "/web/recherche_resultats/1,13-0,1-0,0.html" [1] => 4393 ) [1] => Array ( [0] => "/web/inscription_newsletter/1,27-0,1-0,0.html" [1] => 6121 ) [2] => Array ( [0] => "http://www.lemonde.fr/web/sequence/0,2-3208,1-0,0.html" [1] => 6944 ) [3] => Array ( [0] => "http://medias.lemonde.fr/mmpub/img/tit/nav-une.gif" alt="Home" border="0" height="27"></a></td><td id="m_ann_1129"><a href="http://www.lemonde.fr/web/sequence/0,2-3208,1-0,0.html" [1] => 7111 ) [4] => Array ( [0] => "http://medias.lemonde.fr/mmpub/img/tit/nav-act.gif" alt="Actualités" border="0" height="27"></a></td><td id="m_ann_1130"><a href="http://www.lemonde.fr/web/sequence/0,2-3232,1-0,0.html" [1] => 7409 )
etc etc...
d'où le pb... j'aimerai récupérer juste les liens
l'expression que je cherche pourrait se traduire comme ça
commence par " ou '
http ou ./ ou ../ ou un nom de dossier suivi de slash
continue avec
une chaine de caractère quelconque mais pas d'espace
continue avec
un point suivi d'une extension parmis htm, html, php, php3, php4, php5, asp (à compléter...)
suivi éventuellement par un ?
suivi par une chaine de caractère sans espaces
termine par "ou ' (obligatoirement le même qu'au début)
en gros avec ça on doit pouvoir extraire tous les liens ... même ceux contenus dans les javascript ... reste à le formaliser.
je pense que ce qui cloche dans ma regex (le principal pb) est que
(.+?) signifie toute chaine de caractère ... alors que je voudrai avoir lettres plus chiffres plus _ plus - uniquement
ce qui devrai se traduire par [a-z0-9-_]* mais quand je rentre ça ça ne marhe pas ... j'obtient un gros vide en sortie...
j'espère qu'un calé en regex pourra m'aiguiller ..
@++ et merciiiii !!!
Partager