capture dans les expressions regulieres
Le
kurtz_le_pirate
bonjour,
j'ai une suite de regexp pour extraire des données.
je récupère mes valeurs grace aux regroupements.
par exemple :
$thisDatas =~ m/userName=\"(.*)\" domain/;
$user=$1;
$thisDatas =~ m/page_count=\"(.*)\"/;
$nbpage=$1;
le problème c'est que quand (dans cet exemple) le deuxième
test ne correspond pas, je récupère dans $nbpage, la valeur
du précédent soit $user. pour faire "simple", cet exemple
ne montre l'extraction que de deux valeurs. en realité,
beaucoup plus.
évidement, $1 est "read only" et ne peut être vidée.
voyez-vous un "truc" pour éviter ça ?
merci d'avance :)
--
klp
j'ai une suite de regexp pour extraire des données.
je récupère mes valeurs grace aux regroupements.
par exemple :
$thisDatas =~ m/userName=\"(.*)\" domain/;
$user=$1;
$thisDatas =~ m/page_count=\"(.*)\"/;
$nbpage=$1;
le problème c'est que quand (dans cet exemple) le deuxième
test ne correspond pas, je récupère dans $nbpage, la valeur
du précédent soit $user. pour faire "simple", cet exemple
ne montre l'extraction que de deux valeurs. en realité,
beaucoup plus.
évidement, $1 est "read only" et ne peut être vidée.
voyez-vous un "truc" pour éviter ça ?
merci d'avance :)
--
klp

Poser une question


Un « truc », non. Une solution propre et qui marche, oui, évidemment. Au
choix : tester la valeur booléenne de l'opérateur de match ou l'utiliser en
contexte de liste.
if($data =~ /page_count="(.*)"/) {
$nbpage = $1;
}
($nbpage) = /page_count="(.*)"/;
Nicolas George
J'approuve. ;-)
Ok même si je trouve que c'est plus lisible avec le 'm' explicite :
if ($data =~ m/page_count="(.*)"/) {
$nbpage = $1;
}
Plutôt :
($nbpage) = ($nbpage =~ m/page_count="(.*)"/);
sinon la regexp s'applique à $_. La deuxième paire de parenthèses n'est
pas vraiment obligatoire (puisque =~ est prioritaire sur =) mais, là
encore, l'explicite est toujours plus clair.
--
Paul Gaborit - Perl en français -
Il me semble que c'est :
($nbpage) = ( $thisDatas =~ m/page_count="(.*)"/ );
--
On va y arriver...
Oui, au temps pour moi. Et le second est $data (ou l'horreur en camelCase
avec une faute d'anglais de l'exemple initial si on y tient), pas $nbpage,
bien sûr.
Nicolas George
Bon, finalement à trois on y arrive. Le PO fera le tri ! ;-)
--
Paul Gaborit - Perl en français -