Perlでの$ 1とはどういう意味ですか?さらに、$ 2はどういう意味ですか? $ number変数はいくつありますか?
$number
変数には、キャプチャグループ( ... )
マッチが成功した場合、最後の正規表現マッチのパターンで。
たとえば、次の文字列を使用します。
$text = "the quick brown fox jumps over the lazy dog.";
声明の後
$text =~ m/ (b.+?) /;
$1
は、テキスト「brown
」と同じです。
数値変数は、最後に適用したsuccessful一致または置換演算子からの一致です:
my $string = 'abcdefghi';
if( $string =~ /(abc)def(ghi)/ ) {
print "I found $1 and $2\n";
}
$ 1などを使用する前に、一致または置換が成功したことを常にテストしてください。そうしないと、別の操作から残り物を拾う可能性があります。
Perlの正規表現は perlre で文書化されています。
$ 1、$ 2などには、最後のsuccessfulマッチからのキャプチャの値が含まれます。それらにアクセスする前に、マッチが成功したかどうかを確認することが重要です。
if ( $var =~ m/( )/ ) { # use $1 etc... }
問題の例-$ 1には、以下の両方の印刷ステートメントに「Quick」が含まれています。
#!/usr/bin/Perl
'Quick brown fox' =~ m{ ( quick ) }ix;
print "Found: $1\n";
'Lazy dog' =~ m{ ( quick ) }ix;
print "Found: $1\n";
他の人が指摘したように、$ xは正規表現のキャプチャ変数であり、一致したパターンのセクションを参照できます。
Perlは、名前付きキャプチャもサポートしています。名前付きキャプチャは、場合によっては人間が覚えやすい場合があります。
与えられた入力:111 222
/(\d+)\s+(\d+)/
$ 1は111です
2ドルは222です
また言うことができます:
/(?<myvara>\d+)\s+(?<myvarb>\d+)/
$ + {myvara}は111です
$ + {myvarb}は222です
これらは「一致変数」と呼ばれます。前述のように、それらには最後に一致した正規表現のテキストが含まれています。
詳細はこちら: http://cslibrary.stanford.edu/108/EssentialPerl.html
(対応するセクションを見つけるための「変数の一致」のCTRL-F)
キャプチャグループに尋ねたので、$ +についても知りたいと思うかもしれません。
use Data::Dumper;
$text="hiabc ihabc ads byexx eybxx";
while($text=~/(hi|ih)abc|(bye|eyb)xx/igs)
{
print Dumper $+;
}
出力:
$ VAR1 = 'hi';
$ VAR1 = 'ih';
$ VAR1 = 'さようなら';
$ VAR1 = 'eyb';
Perlの「マジック」変数に関する一般的な質問は、次のようにPerlの事前定義変数のドキュメントを参照することで回答できます。
perldoc perlvar
ただし、このドキュメントで$ 1などを検索すると、これらの「数字」変数に関するセクションを除き、多くの場所で参照が見つかります。検索する必要があります
$<digits>
私はこれを Brianの答え にコメントや編集で追加したでしょうが、十分な担当者がいません。誰かがこれを追加したら、この答えを削除します。
私は2**32 -1
32ビットコンパイルされたPerlバイナリの番号付き一致変数。
変数$ 1 .. $ 9も読み取り専用変数なので、暗黙的に値を割り当てることはできません。
$ 1 = 'foo';印刷$ 1;
エラーが返されます:スクリプト行1で読み取り専用の値を変更しようとしました。
変数名の先頭に数字を使用することもできません。
$ 1foo = 'foo'; print $ 1foo;
上記もエラーを返します。