Oh god I hate perl - bloop bloop! [Résolu]

  • alex89
  • Bronze Member
  • Bronze Member
  • Avatar de l’utilisateur
  • Inscription: Juil 18, 2008
  • Messages: 239
  • Loc: Western Australia
  • Status: Offline

Message Octobre 4th, 2009, 7:46 am

Im essayant de remplacer la chaîne entre crochets "forum [poisson] texte ici [/ poisson]» par «boop! Boop t! E boop! X boop! Boop th! E boop! R boop! E"

Ma tentative semble avoir quelques problèmes. Des idées?

PERL Code: [ Select ]
my $message = "start [fish]middle[/fish] end \n newline";
 
my $fish = $message;
print "\n1" . $message;
print "\n2" . $fish;
$fish =~ s~\[fish\](.+?)\[/fish\]~~isg;
 
print "\n3: " . $fish;
 
my $newfish;
 
for ($count = 0; $count < length ($newfish); $count++){
 
 $newfish .= substr ($fish, $count, 1)."blop!";
 
}
 
print $newfish;
 
$message =~ s~\[fish\](.+?)\[/fish\]~$newfish~isg;
 
print $message;
  1. my $message = "start [fish]middle[/fish] end \n newline";
  2.  
  3. my $fish = $message;
  4. print "\n1" . $message;
  5. print "\n2" . $fish;
  6. $fish =~ s~\[fish\](.+?)\[/fish\]~~isg;
  7.  
  8. print "\n3: " . $fish;
  9.  
  10. my $newfish;
  11.  
  12. for ($count = 0; $count < length ($newfish); $count++){
  13.  
  14.  $newfish .= substr ($fish, $count, 1)."blop!";
  15.  
  16. }
  17.  
  18. print $newfish;
  19.  
  20. $message =~ s~\[fish\](.+?)\[/fish\]~$newfish~isg;
  21.  
  22. print $message;


La même chose en javascript & #058;

JAVASCRIPT Code: [ Select ]
var fish = message.match(/\[fish\](.+?)\[\/fish\]/ig);
 
if(fish != null) {
 
fish = fish[0];
 
fish = fish.replace( "[fish]", "");
fish = fish.replace( "[/fish]" , "");
 
var newfish = "";
 
for (var counter = 0;counter < fish.length ;counter ++ ) {
   newfish += fish.substring(counter-1, counter) + "bloop bloop!";
}
 
message = ubbcstr.replace(/\[fish\](.+?)\[\/fish\]/ig, newfish);
 
}
  1. var fish = message.match(/\[fish\](.+?)\[\/fish\]/ig);
  2.  
  3. if(fish != null) {
  4.  
  5. fish = fish[0];
  6.  
  7. fish = fish.replace( "[fish]", "");
  8. fish = fish.replace( "[/fish]" , "");
  9.  
  10. var newfish = "";
  11.  
  12. for (var counter = 0;counter < fish.length ;counter ++ ) {
  13.    newfish += fish.substring(counter-1, counter) + "bloop bloop!";
  14. }
  15.  
  16. message = ubbcstr.replace(/\[fish\](.+?)\[\/fish\]/ig, newfish);
  17.  
  18. }
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Octobre 4th, 2009, 7:46 am

  • mk27
  • Proficient
  • Proficient
  • Avatar de l’utilisateur
  • Inscription: Juin 09, 2009
  • Messages: 334
  • Status: Offline

Message Octobre 4th, 2009, 7:35 pm

PERL ROCKS!

Une erreur vous êtes pris en est que la seconde moitié de la substitution a des règles échapper légèrement différent de celui du premier semestre. Par exemple, vous devez vous échapper [] dans la première moitié, mais ils n'ont pas de sens dans le second sont si fines comme SAUF ils suivent une variable de chaîne...deviner pourquoi:

$ var [

uh-oh! thats un abonnement de tableau! Vous ne réalisons pas cela, mais il est impliqué dans l'exemple ci-dessous, alors surveillez bien pour ce détail (ligne 13).

Une erreur vous ne faites est que / doit être échappés dans les deux moitiés, puisque tel est le diviseur, même si vous semblez utiliser \ pour une raison quelconque - qui est faux.

Donc:
PERL Code: [ Select ]
#!/usr/bin/perl -w
use strict;
 
# simple replacement
my $string = "[fish]text here[/fish]\n";
$string =~ s/\[fish\].*\[\/fish\]/[fish]boop boop[\/fish]/g;
print $string;
 
# replacement involving intermediate process
$string = "[fish]text here[/fish]\n";
$string =~ /\[fish\](.*)\[\/fish\]/;
my $new = uc();
$string =~ s/\[fish\].*\[\/fish\]/[fish]$new\[fish]/g;
print $string;
 
  1. #!/usr/bin/perl -w
  2. use strict;
  3.  
  4. # simple replacement
  5. my $string = "[fish]text here[/fish]\n";
  6. $string =~ s/\[fish\].*\[\/fish\]/[fish]boop boop[\/fish]/g;
  7. print $string;
  8.  
  9. # replacement involving intermediate process
  10. $string = "[fish]text here[/fish]\n";
  11. $string =~ /\[fish\](.*)\[\/fish\]/;
  12. my $new = uc();
  13. $string =~ s/\[fish\].*\[\/fish\]/[fish]$new\[fish]/g;
  14. print $string;
  15.  


Utilisation d'un éditeur qui a une bonne coloration syntaxique pour perl aide beaucoup avec ça (la mise en évidence ici est relativement grossier et ne couvre pas les expressions régulières)...une alternative pour la ligne 6 est la suivante:
Code: [ Select ]
$string =~ s/(\[fish\]).*(\[\/fish\])/boop boop/g;
Image
  • alex89
  • Bronze Member
  • Bronze Member
  • Avatar de l’utilisateur
  • Inscription: Juil 18, 2008
  • Messages: 239
  • Loc: Western Australia
  • Status: Offline

Message Octobre 4th, 2009, 8:47 pm

Ah merci, je le prendre maintenant.

Mon code final:

PERL Code: [ Select ]
$message=~ /\[fish\](.*)\[\/fish\]/;
my $fish = ; #I thought you could do this in one line
 
my $newfish;
 
for ($count = 0; $count < length ($fish); $count++){
   $newfish .= substr ($fish, $count, 1)." bloop bloop! ";
}
 
$message =~ s~\[fish\](.+?)\[/fish\]~$newfish~isg;
  1. $message=~ /\[fish\](.*)\[\/fish\]/;
  2. my $fish = ; #I thought you could do this in one line
  3.  
  4. my $newfish;
  5.  
  6. for ($count = 0; $count < length ($fish); $count++){
  7.    $newfish .= substr ($fish, $count, 1)." bloop bloop! ";
  8. }
  9.  
  10. $message =~ s~\[fish\](.+?)\[/fish\]~$newfish~isg;

Afficher de l'information

  • Total des messages de ce sujet: 3 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 166 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC