Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Retourner aux forums || Retourner au forum Programmation.perl

Programmation.perl : Expressions regulière

Posté par eMerzh (Jabber id, page perso, ) le 20 février 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"'

> Lire le message (4 commentaires, moyenne: 2).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

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

je dirais...

Posté par bergamote23 () le 20/02/2006 à 09:05. (lien). Évalué à 4.

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

voila

  • [^]Re: je dirais...

    Posté par eMerzh (Jabber id, page perso, ) le 20/02/2006 à 10:05. (lien). É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"...

    • [^]Re: je dirais...

      Posté par alenvers () le 20/02/2006 à 14:39. (lien). Évalué à 2.

      >pourquoi il remplace pas l'espace avant "and"...

      Parce que l'expression ne match qu'un seul espace entre les guillemets.

      Je propose
      echo 'Hello "world co" "brol and "' | perl -ne 'print join("\"",map { s/ /\%20/g if ($i++ % 2); $_ } split(/"/))'

      Ou encore
      echo 'Hello "world co" "brol and "' | perl -ne 's/("[^"]*\s[^"]*")/{$t=$1; $t =~ s# #%20#g; $t}/ge; print'

  • [^]Re: je dirais...

    Posté par LeSeb (page perso, ) le 20/02/2006 à 18:36. (lien). É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/;
    }

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.perl