Forum Programmation.perl Expressions regulière

Posté par  (site web personnel) .
Étiquettes : aucune
0
20
fév.
2006
Bonjour, j'ai un petit problème avec les reg-exp...
Je cherche à remplacer tout les espaces contenu entre 2 quotes.

par exemple j'ai une chaine a='hello "every body".linux "is great"'
après le remplacement avec un %20 par exemple, cette chaine devrai etre :
'hello "every%20body".linux "is%20great"'
  • # je dirais...

    Posté par  . Évalué à 4.

    ($b = $a) =~ s/"([^"]*)\s([^"]*)"/$1%20$2/g;

    voila
    • [^] # Re: je dirais...

      Posté par  (site web personnel) . Évalué à 1.

      wip , merci beaucoup :)

      j'y suis presque ... mais c'est pas encor tout à fais ok....
      quand je fait :

      $line='Hello "world co" "brol and "';
      ($b = $line) =~ s/("[^"]*)\s([^"]*")/$1%20$2/g;
      print $b."\n";

      il me donne :
      Hello "world%20co" "brol and%20"

      pourquoi il remplace pas l'espace avant "and"...
      • [^] # Commentaire supprimé

        Posté par  . Évalué à 2.

        Ce commentaire a été supprimé par l’équipe de modération.

    • [^] # Re: je dirais...

      Posté par  (site web personnel) . Évalué à 1.

      Comme on dit en Perl, "il y a plus d'une façon de le faire", voici la mienne.
      Certainement pas la plus efficace, mais elle a le mérite de fonctionner ...

      my $chaine = 'hello "world co" "brol and " youpi';
      foreach my $avant ( $chaine =~ m/"(.*?\s+.*?)"/g )
      {
      my $apres = $avant;
      $apres =~ s/\s/%20/g;
      $chaine =~ s/$avant/$apres/;
      }

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.