
151
8.4 マッチ変数
同数存在します。あなたの予想通りに、
$4
には、
4
番目のカッコのペアにマッチした文字列が入っ
ています。これはパターンマッチの際に、後方参照
\4
が表すものと同じ文字列です。しかしこれ
らは、同じものを表す別の記法ではありません。
\4
はパターンマッチを行っている最中にキャプ
チャされているものを参照しますが、
$4
はすでに完了したパターンマッチのキャプチャを参照し
ます。後方参照についてさらに詳しく知りたい人は
perlre
ドキュメントを読んでください。
このようなマッチ変数を活用すると、正規表現はさらに便利になります。なぜなら、マッチ変数
を利用すれば、文字列の一部分を取り出すことができるからです。
$_ = "Hello there, neighbor";
if (/\s([a-zA-Z]+),/) { #
スペースとカンマの間のワードを記憶する
print "the word was $1\n"; #
そのワード
there
を表示する
}
また、キャプチャを同時に
2
個以上使うこともできます。
$_ = "Hello there, neighbor";
if (/(\S+) (\S+), (\S+)/) {
print "words were $1 $2 $3\n";
}
このコードを実行すると、
words were Hello there neighbor
と表示します。出力にはカンマが
含まれないことに注目してください。このパターンでは、カンマはキャプチャするカッコの外側に
あるので、カンマはキャプチャ ...