Retourner aux forums || Retourner au forum Programmation.perl

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

Posté par Ontologia (page perso, ) le 27 avril 2007
0
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 ?

> Lire le message (1 commentaire, moyenne: 3).  

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.

regexp

Posté par sylvain cresto (page perso, ) le 27/04/2007 à 12:20. (lien). É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
}

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