Forum Programmation.perl Récupérer des captures multiples

Posté par  (site web personnel) .
Étiquettes : aucune
0
27
avr.
2007
Bonjour, je suis en train d'écrire un petit script m'aidant à générer de la doc
J'ai ça : - from_external p:NATIVE_ARRAY[CHARACTER] <-
ça me rend : //* Syntaxe,Header : := from_external_copy <p>

J'ai écris pour cela le bête code :

#!/bin/perl


use strict;
my $res;
while (my $line = ) {
   if ($line =~ /\s*-([\w\s_:,\[\]]+)<-/) {
   # C'est une ligne de def de slot
   $res = $1;
   $res =~ s/([\w_]+)(\s*:[A-Z_\]\[]+)/<$1>/g;

   print " //* Syntaxe,Header : := $res\n";
}
  else {
   print $line;
  }
}


Je voudrai produire pour chacune des captures ([\w_]+) (de la ligne $res =~ s/([\w_]+)(\s*:[A-Z_\]\[]+)/<$1>/g; )

une ligne du genre
// <p> : NATIVE_ARRAY[CHARACTER] <
Et qu'il me crache plusieurs lignes s'il y a plusieurs séquences.

Donc, en d'autres termes, comment, en perl, peut on récupérer, pour une regexp qui matche une capture en plusieurs endroit de la phrase, la liste des captures et boucler dessus ?
  • # regexp

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

    Je n'ai pas très bien compris ton exemple, donc suivant ce que tu veux faire (avec une expression réguliere tout simple), pour récupérer le résultat dans un array:


    my $a="abc def ghf";

    my @resultats = ($a =~ m/([\w_]+)/g);

    foreach my $element (@resultats) {
      print "un element=$element\n";
      # ton traitement
    }



    Ou plus simplement pour l'utiliser directement dans une boucle:


    my $a="abc def ghf";

    foreach my $element ($a=~m/([\w_]+)/g) {
      print "un element=$element\n";
      # ton traitement
    }

Suivre le flux des commentaires

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