73 votes

Que signifie $ 1 en Perl?

Que signifie $ 1 en Perl? De plus, que signifie 2 $? Combien y a-t-il de variables de nombre $?

75voto

rlbond Points 24215

Les variables $number contiennent les parties de la chaîne correspondant aux groupes de capture du modèle pour votre dernière correspondance regex si la correspondance a abouti.

Par exemple, prenez la chaîne suivante:

 $text = "the quick brown fox jumps over the lazy dog.";
 

Après la déclaration

 $text =~ m/ (b.+?) /;
 

$1 est égal au texte " brown ".

36voto

Jim Puls Points 29289

Les variables numériques sont les correspondances du dernier opérateur de correspondance ou de substitution réussi que vous avez appliqué:

 my $string = 'abcdefghi';

if( $string =~ /(abc)def(ghi)/ ) {
    print "I found $1 and $2\n";
    }
 

Vérifiez toujours que la correspondance ou la substitution a réussi avant d’utiliser $ 1, etc. Sinon, vous pourriez récupérer les restes d’une autre opération.

Les expressions rationnelles Perl sont documentées dans perlre .

12voto

plusplus Points 1625

$ 1, $ 2, etc. contiendront la valeur des captures de la dernière correspondance réussie - il est important de vérifier si la correspondance a réussi avant d'y accéder, c'est-à-dire

  if ( $var =~ m/( )/ ) { # use $1 etc... }
 

Un exemple du problème - $ 1 contient 'Quick' dans les deux instructions d'impression ci-dessous:

 #!/usr/bin/perl

'Quick brown fox' =~ m{ ( quick ) }ix;
print "Found: $1\n";

'Lazy dog' =~ m{ ( quick ) }ix;
print "Found: $1\n";
 

10voto

Einstein Points 2935

Comme d'autres l'ont fait remarquer, les $ x sont des variables de capture pour les expressions régulières, vous permettant de référencer des sections d'un modèle correspondant.

Perl prend également en charge les captures nommées qui peuvent être plus faciles à mémoriser dans certains cas.

entrée donnée: 111 222

 /(\d+)\s+(\d+)/
 

1 $ est 111

2 $ est 222

On pourrait aussi dire:

 /(?<myvara>\d+)\s+(?<myvarb>\d+)/
 

$ + {myvara} vaut 111

$ + {myvarb} vaut 222

6voto

John T Points 14067

Celles-ci s'appellent "Variables de correspondance". Comme mentionné précédemment, ils contiennent le texte de votre dernière correspondance d'expression régulière.

Plus d'informations ici: http://cslibrary.stanford.edu/108/EssentialPerl.html

(CTRL-F pour 'Match Variables' pour trouver la section correspondante)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X