Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1560 connectés 

 


Dernière réponse
Sujet : [Perl] --->!! Pour les PROS des regexp !!<--
FLY LM Ola, j'ai du écire une connerie, y-a sans doute pas besoin d'échapper les doubles quotes en PERL vu la construction syntaxique de la regexp.
 
d'ou : $code=~s/SRC="([^"]+)"/$1/;  
 
et pas $code=~s/SRC=\"([^\"]+)\"/$1/;  
 
Zuuu

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
FLY LM Ola, j'ai du écire une connerie, y-a sans doute pas besoin d'échapper les doubles quotes en PERL vu la construction syntaxique de la regexp.
 
d'ou : $code=~s/SRC="([^"]+)"/$1/;  
 
et pas $code=~s/SRC=\"([^\"]+)\"/$1/;  
 
Zuuu
FLY LM Et si tu fais :
 
$code=~s/SRC=\"([^\"]+)\"/$1/;
 
Je ne sais pas si la référence arrière en PERL est le $1 ou //1
(normalement, cela fera référence à ce qui est entre parenthèse dans la REGEXP , cad ([^\"]+) donc ce que tu veux).
 
Quand je t'ai dit que la REGEXP marchait, bien sûr c'était en PHP, mais les fonctions que j'utilise sont compatibles PERL, donc je suppose que la syntaxe doit être bonne ou très proche...
 
Maintenant je ne connais pas la manière équivalente en PERL de faire ce que les fonctions PHP font...
 
Essaies quand même avec ces histoires de références arrières.
jibix non c'est moi qui le mets sur une seule ligne car sinon j'ai des problèmes lorsque j'insère des infos dans la base de données. Mais ça,  c'est un tout autre bordel ! :)
Ton expreg me renvois le string en entier :
voici l'ordre de passe des regexp ->
$code=~ s#(\s|;|{|})//.+$# #mg;  #no comment
$code=~ /SRC=\"([^\"]+)\"/;
$code=~ s/\s+/ /g;  #suppr espace et rchariot
FLY LM Au fait, ton :
 
<!-- document.write('');document.write('<IFRAME  
SRC="http://ad.fr.doubleclick.net/aid/www.freev3.fr/home;kw=x;sz=  
468*60;ors='ordval+'?" ....  
 
c'est sur une seule ligne ??? Les expressions régulières ça marche que si ta chaine est sur une ligne non ??. Si ta chaine est sur une seule ligne, avec cette REGEXP : /SRC=\"([^\"]+)\"/ je récupère tout ce qu'il y a dans SRC...

 

[edtdd]--Message édité par fly lm--[/edtdd]

jibix J'ai une question pour ceux qui connaissent un peu Tokeparser :
 
afin de résoudre mon problème précedent , c'est à dire recupérer les SRC.
Si on parse le $code , est-ce que Tokeparser pourrait marcher ?
Je viens d'essayer mais je n'obtiens aucune sortie alors la vraie question est : est-ce que Javascript m'empeche de parser son contenu ???
 
(n.b :je suis toujour preneur pour une regexp qui marche !)
jibix effectivement c'est une solution mais le problème actuel c'est de chopper correctement ce qu'il y a dans le SRC ( entre les deux " ).
Je cherche l'expreg adéquat ...
Perl me renvoi tout le doc a chaque fois , alors que je demande uniquement les SRC ...
c'est bien là le problème ! :ouch:  
 
merci quand même fly  :)
FLY LM Comme je connais pas PERL, je te prospose quelques solutions :
 
a - Existe t'il une façon d'affecter à une variable ce que la REGEXP aura reconnu ?? Si oui, tu choppes tout ce qu'il y a après ton SRC (entre les deux " )(genre '/scr="([^"]+)"/') et tu affectes cela à une variable.
 
b - Tu peux peut-être te débrouiller en remplaçant la totalité de ta variale par une référence arrière (morceau de REGEXP).
 
-> $var = ~s/'^..blabla....scr="([^"]+)"..blabla..$'/'//1'/; le //1 représente ta référence arrière.
 
Maintenant, commme je te l'ai déjà dit, je connais pas le PERL et j'ai pas de moyen de vérifier ce que je te raconte.

 

[edtdd]--Message édité par fly lm--[/edtdd]

jibix après avoir avoir appliquer :  $code=~ s/\s+/ /g et~ s#(\s|;|{|})//.+$# #mg (pour virer les commentaires)
 
j'obtiens :  <!-- document.write('');document.write('<IFRAME  
SRC="http://ad.fr.doubleclick.net/aid/www.freev3.fr/home;kw=x;sz=
468*60;ors='ordval+'?" ....
ce qui m'interesse c'est ce qu'il y a apres le SRC soit "http:// ... ?"
et virer tout le reste !
quelqu'un a-t-il une solution ??
 
merci !
FLY LM

fly lm a écrit a écrit :

Pour le PERL je ne sais pas, mais en PHP cela pourrait donner cela :
 
$code = " http://www.acipiter; window.open('coucou',$url) ";
 
$new_code = preg_replace("/'([^'])+'/","''", $code);
 
En PERL, peut-être cela :
 
$new_code =~s/'([^'])+'/''/;
 
Je ne peux pas tester pour le PERL, d'aileurs j'en ai jamais fait... Mais bon ...  




 
Oups, une petite erreur d'écriture : le + dans l'expression rationnelle est à mettre à l'intérieur des parenthèses...
 
$new_code =~s/'([^']+)'/''/;
 
Idem pour la version PHP :
 
$new_code = preg_replace("/'([^']+)'/","''", $code);
 
Ca devrait normalement être bon...

gux $code =~ s/'.*'//;
ça va éliminer 'coucou' (avec les quotes).
sinon c'est $code =~ s/'.*'/''/; pour garder les quotes.
 
les doubles quotes ne comptent pas, se sont des délimiteurs de chaines.
jibix marche pas  :(  
 
mais merci quand même
FLY LM Pour le PERL je ne sais pas, mais en PHP cela pourrait donner cela :
 
$code = " http://www.acipiter; window.open('coucou',$url) ";
 
$new_code = preg_replace("/'([^'])+'/","''", $code);
 
En PERL, peut-être cela :
 
$new_code =~s/'([^'])+'/''/;
 
Je ne peux pas tester pour le PERL, d'aileurs j'en ai jamais fait... Mais bon ...
jibix comment eliminer dans une chaine de caractères ( un type string) ce  qui se trouve uniquement entre quote ou double quote
?
 
exemple : $code=" http://www.acipiter; window.open('coucou',$url) ";
 
Je ne veux plus du coucou  en faite .

Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR