[Perl] --->!! Pour les PROS des regexp !!<--

--->!! Pour les PROS des regexp !!<-- [Perl] - Programmation

Marsh Posté le 17-07-2001 à 10:46:51    

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 .

Reply

Marsh Posté le 17-07-2001 à 10:46:51   

Reply

Marsh Posté le 17-07-2001 à 11:36:21    

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 ...

Reply

Marsh Posté le 17-07-2001 à 11:40:19    

marche pas  :(  
 
mais merci quand même

Reply

Marsh Posté le 17-07-2001 à 18:04:05    

$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.

Reply

Marsh Posté le 17-07-2001 à 23:06:57    

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...

Reply

Marsh Posté le 18-07-2001 à 11:13:35    

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 !

Reply

Marsh Posté le 18-07-2001 à 12:00:31    

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]

Reply

Marsh Posté le 18-07-2001 à 12:09:43    

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  :)

Reply

Marsh Posté le 18-07-2001 à 12:32:38    

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 !)

Reply

Marsh Posté le 18-07-2001 à 13:25:50    

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]

Reply

Marsh Posté le 18-07-2001 à 13:25:50   

Reply

Marsh Posté le 18-07-2001 à 14:17:52    

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

Reply

Marsh Posté le 18-07-2001 à 14:37:28    

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.

Reply

Marsh Posté le 20-07-2001 à 10:04:57    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed