expression reguliere d'un url

Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics

comme0
Nouveau WRInaute
 
Messages: 9
Inscription: Mar Mai 27, 2008 13:05

expression reguliere d'un url

Message le Mar Mai 27, 2008 13:19

bonjour tout le monde,
je suis actuellement entraine de programmé en perl, c'est la première fois et j'ai un problème pour l'expression régulière d'un url que je dois aller et récupérer des ids. voici l'url : href="resumeSearchResults.cfm?pageAction=viewResumeSearchResult&resumeId=757663" , le numero de la fin (id) varie et voici ce que j'ai fait qui fonctionne pas.

while($Fichier=readdir(DIR)) {
if(($Fichier ne ".") && ($Fichier ne "..")){

if($fichier=~ "#^(((?:http[s]?)://)?(?(2)(www\.)?|(www\.){1})([-a-z0-9_]{2,}\.[-a-z0-9.]{2,}[-a-z0-9\/&\?=.]{2,})$#i\)"){

$Fichier= "/var/www/html/firstpage/".$Fichier;
open(LOG, "$Fichier") or die(" pb avec $Fichier : $!\n");
while(my $ligne = <LOG>) {
chomp($ligne);

if($ligne= ^href="\resumeSearchResults\.cfm\?pageAction&.*resumeId=(\d+)/$#i"){


print ECRIRE $1."#";
$l++;
}

}

}
}
}
merci de bien vouloir m'aider.

jcaron
WRInaute accro
WRInaute accro
 
Messages: 1196
Inscription: Ven Fév 13, 2004 20:33

Re: expression reguliere d'un url

Message le Mar Mai 27, 2008 13:38

comme0 a écrit:while($Fichier=readdir(DIR)) {
if(($Fichier ne ".") && ($Fichier ne "..")){


Tu ferais mieux de faire un next if $Fichier =~ /^./; ça simplifie la lecture...

comme0 a écrit:if($fichier=~ "#^(((?:http[s]?)://)?(?(2)(www\.)?|(www\.){1})([-a-z0-9_]{2,}\.[-a-z0-9.]{2,}[-a-z0-9\/&\?=.]{2,})$#i\)"){


Là tu compares le nom du fichier (et non son contenu) avec ta regex de la mort qui tue. En plus je ne suis pas vraiment convaincu qu'elle soit très juste, et au minimum il y a beaucoup de choses superflues dedans. Mais que cherches-tu réellement à faire avec?

comme0 a écrit:
$Fichier= "/var/www/html/firstpage/".$Fichier;
open(LOG, "$Fichier") or die(" pb avec $Fichier : $!\n");
while(my $ligne = <LOG>) {
chomp($ligne);

if($ligne= ^href="\resumeSearchResults\.cfm\?pageAction&.*resumeId=(\d+)/$#i"){


- ça doit même pas compiler, ça, si? $ligne =~ /ta-regex/ ça devrait déjà mieux marcher...
- le href=... se situe vraiment en tout début de ligne?
- à quoi sert le \ dans href="\?
- la fin de ta "regex" me laisse perplexe... je pense que tu voulais dire "$/i mais je n'en suis pas convaincu. Et ça impliquerait qu'on passe à la ligne juste après cet attribut...

comme0 a écrit:merci de bien vouloir m'aider.


perldoc perlre :-)

Jacques.

comme0
Nouveau WRInaute
 
Messages: 9
Inscription: Mar Mai 27, 2008 13:05

Message le Mar Mai 27, 2008 13:58

en fait c'est la premiere fois que je fais j'ai beaucoup lu et voila ce que j'ai pu ecrire,
ce que je veux n'est rien de particulier qu'aller dans ce url: href="resumeSearchResults.cfm?pageAction=viewResumeSearchResult&resumeId=757663 et recuperer le nonbre 757663 qui varier pour le mettre dans fichier où je peux l'exploiter après.
alors vous pouvez me suggerer une solution.
merci

jcaron
WRInaute accro
WRInaute accro
 
Messages: 1196
Inscription: Ven Fév 13, 2004 20:33

Message le Mar Mai 27, 2008 15:00

comme0 a écrit:en fait c'est la premiere fois que je fais j'ai beaucoup lu et voila ce que j'ai pu ecrire,
ce que je veux n'est rien de particulier qu'aller dans ce url: href="resumeSearchResults.cfm?pageAction=viewResumeSearchResult&resumeId=757663 et recuperer le nonbre 757663 qui varier pour le mettre dans fichier où je peux l'exploiter après.
alors vous pouvez me suggerer une solution.
merci


Code: Tout sélectionner
open my $fh,"$filename" or die "can't open $filename";
while (<$fh>)
{
if (/href="resumeSearchResults\.cfm\?pageAction=viewResumeSearchResult&resumeId=(\d+)"/)
{
  print "$1\n";
}
}


Non?

Jacques.

comme0
Nouveau WRInaute
 
Messages: 9
Inscription: Mar Mai 27, 2008 13:05

Message le Mar Mai 27, 2008 15:13

j'ai fait ça maintenant

if($Fichier=~ m/html/i){
open(LOG, "$Fichier") or die(" pb avec $Fichier : $!\n");
while(my $ligne = <LOG>) {
chomp($ligne);

if($ligne=~ m/href="resumeSearchResults.cfm\?pageAction&.*resumeId=(\d+)\"/i){
print ECRIRE $1."#";
$l++;
}

}

}
mais toujour rien

jcaron
WRInaute accro
WRInaute accro
 
Messages: 1196
Inscription: Ven Fév 13, 2004 20:33

Message le Mar Mai 27, 2008 15:37

comme0 a écrit:j'ai fait ça maintenant

if($Fichier=~ m/html/i){
open(LOG, "$Fichier") or die(" pb avec $Fichier : $!\n");
while(my $ligne = <LOG>) {
chomp($ligne);

if($ligne=~ m/href="resumeSearchResults.cfm\?pageAction&.*resumeId=(\d+)"/i){
print ECRIRE $1."#";
$l++;
}

}

}
mais toujour rien


1. "rien", ce n'est pas très précis... Il y a des erreurs, des warnings? Ajoute "use strict; use warnings" au début de ton programme, ça permettra d'en savoir plus.
2. Je suppose que le fh "ECRIRE" existe, et que tu as ouvert le fichier correspondant en écriture, que tu as vérifié qu'il l'ouvrait bien, et que tu as vérifié ce qu'il contenait à la fin?

Jacques.

comme0
Nouveau WRInaute
 
Messages: 9
Inscription: Mar Mai 27, 2008 13:05

Message le Mar Mai 27, 2008 15:54

voici au complet mon script:
#!/usr/local/bin/perl
use Switch;


open(ECRIRE,">//var/www/html/comme/les_ids/mesIds")or die ("Erreur de creation de ids") ;
$dir = "/var/www/html/firstpage/";
$k=0;
$l=0;
opendir(DIR, $dir) || print "Repertoire $dir introuvable:$!\n";
while($Fichier=readdir(DIR)) {
if(($Fichier ne ".") && ($Fichier ne "..")){
if($Fichier=~ m/html/i){

$Fichier= "/var/www/html/firstpage/".$Fichier;
open(LOG, "$Fichier") or die(" pb avec $Fichier : $!\n");
while(my $ligne = <LOG>) {
chomp($ligne);

if($ligne=~ m/href="resumeSearchResults.cfm\?pageAction&.*resumeId=(\d+)\"/i){


print ECRIRE $1."#";
$l++;
}

}

}
}
}

closedir(DIR);
close(ECRIRE);
$chaine="";
$chaineold="";
$oldvar="";
open(ECRIRE2,">/var/www/html/comme/les_ids/mesIdsFinal")or die ("Erreur de creation de creation \n") ;
open(LOG2, "/var/www/html/comme/les_ids/mesIds") or die(" pb avec : $!\n");
open(LOG3, "/var/www/html/comme/les_ids/mesIdsFinalOLD") or die(" pb avec : $!\n");
while(my $ligne = <LOG2>) {
chomp($ligne);
$chaine=$chaine."#".$ligne;
}
while(my $ligne = <LOG3>) {
chomp($ligne);
$chaine3=$chaine3."#".$ligne;
}
@Myliste = split(/#/, $chaine);
@Myliste = sort @Myliste;
foreach $var (@Myliste){
if($var ne $oldvar && !($chaine3 =~ m/#$var#/i)){ $oldvar=$var;print ECRIRE2 $var."#";$k++;}
}
close(LOG2);
close(ECRIRE2);
print $l.":".$k;

merci pour tes efforts

jcaron
WRInaute accro
WRInaute accro
 
Messages: 1196
Inscription: Ven Fév 13, 2004 20:33

Message le Mar Mai 27, 2008 16:34

Eh, il n'y a pas marqué "on écrit tes scripts à ta place" ici, hein...

Si ton script il ne marche pas, ben tu débuggues. Tu commences par mettre les "use strict; use warnings;" dont je t'ai parlé, et tu ajoutes des traces pour voir ce qu'il fait, et tu vas finir par trouver ce qui ne marche pas.

Ceci dit, un petit indice, "print" ne rajoute pas de retour à la ligne spontanément, et pense à regarder ce qu'il y a dans tes fichiers intermédiaires pour voir...

Jacques.

comme0
Nouveau WRInaute
 
Messages: 9
Inscription: Mar Mai 27, 2008 13:05

Message le Mar Mai 27, 2008 16:47

merci pour ton aide.

comme0
Nouveau WRInaute
 
Messages: 9
Inscription: Mar Mai 27, 2008 13:05

Message le Mer Mai 28, 2008 14:33

dsl pour le derangement mais j'ai un probleme avec le Strict et warnings; en je reçoi un message d'erreur qui me dit:
Can't locate Strict.pm in @INC (@INC contains: /usr/lib/perl5/5.8.5/i386-linux-thread-multi

encore merci.

jcaron
WRInaute accro
WRInaute accro
 
Messages: 1196
Inscription: Ven Fév 13, 2004 20:33

Message le Mer Mai 28, 2008 14:40

comme0 a écrit:dsl pour le derangement mais j'ai un probleme avec le Strict et warnings; en je reçoi un message d'erreur qui me dit:
Can't locate Strict.pm in @INC (@INC contains: /usr/lib/perl5/5.8.5/i386-linux-thread-multi

encore merci.


Pas de majuscule à "strict".

Jacques.

comme0
Nouveau WRInaute
 
Messages: 9
Inscription: Mar Mai 27, 2008 13:05

Message le Mer Mai 28, 2008 15:32

il ne m'indique pas où il y a les erreurs mais il m'affiche message de ce genre:
Global symbol "$ dir" exige explicitement le nom du paquet à indexcandidats.pl ligne 7. et c'est pour toutes les variables que j'ai utilisé.
et à la fin il me dit la compilation a été avorté en raison des erreurs de compilation.

puis-je avoir plus detaille si c'est possible.
merci

jcaron
WRInaute accro
WRInaute accro
 
Messages: 1196
Inscription: Ven Fév 13, 2004 20:33

Message le Mer Mai 28, 2008 15:38

comme0 a écrit:il ne m'indique pas où il y a les erreurs mais il m'affiche message de ce genre:
Global symbol "$ dir" exige explicitement le nom du paquet à indexcandidats.pl ligne 7. et c'est pour toutes les variables que j'ai utilisé.
et à la fin il me dit la compilation a été avorté en raison des erreurs de compilation.

puis-je avoir plus detaille si c'est possible.
merci


Il faut que tu déclares tes variables avant de les utiliser: my $dir; par exemple...

Jacques.

comme0
Nouveau WRInaute
 
Messages: 9
Inscription: Mar Mai 27, 2008 13:05

Message le Mer Mai 28, 2008 16:12

apres bcp des modif je pense que mon script devrais marcher, mais j'ai un souci c'est que l'url que j'ai ecrit je pense que c'est pas bon. voila l'url que je veux utiliser
href="resumeSearchResults.cfm?pageAction=viewResumeSearchResult&resumeId=757663"

voici ce que j'ai ecrit:
if($ligne=~ m/"href=resumeSearchResults.cfm\?pageAction&.*resumeId=(\d+)\"/i)

j'aimerai bien si c'est possible une proposition,
merci.

jcaron
WRInaute accro
WRInaute accro
 
Messages: 1196
Inscription: Ven Fév 13, 2004 20:33

Message le Mer Mai 28, 2008 16:24

comme0 a écrit:apres bcp des modif je pense que mon script devrais marcher, mais j'ai un souci c'est que l'url que j'ai ecrit je pense que c'est pas bon. voila l'url que je veux utiliser
href="resumeSearchResults.cfm?pageAction=viewResumeSearchResult&resumeId=757663"

voici ce que j'ai ecrit:
if($ligne=~ m/"href=resumeSearchResults.cfm\?pageAction&.*resumeId=(\d+)"/i)

j'aimerai bien si c'est possible une proposition,
merci.


ben si tu ne mets pas le " au même endroit que tu le cherches, forcément, ça ne peut pas marcher. Sinon pas besoin d'escaper le deuxième ". Bref:

Code: Tout sélectionner
if($ligne =~ m/href="resumeSearchResults.cfm\?pageAction&.*resumeId=(\d+)"/i)


Jacques.

expression reguliere d'un url

Formation recommandée sur ce thème :

Formation URL Rewriting et sites dynamiques : apprenez comment mettre en place la réécriture d'URL, comment optimiser vos URL et profiter de vos pages dynamiques pour booster votre référencement. Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités