2011-07-13 20 views
9

Rubyでは値$ 1、$ 2、$ '、$ `は何を意味しますか?Rubyの番号付きグローバル変数は何ですか

+0

Rubyの開発者は、わかりやすい変数名を選んでいると思っていると思います。 – aroth

+5

あなたは実際に彼らのためにlwallを責めなければなりません。 RubyはPerlからそれらをインポートしました。 – geekosaur

+2

@geekosaur、必ずしもそうではありませんが、私がラリーウォールがawkからそれらをインポートしたことを覚えている限り。 Rubyistは "英語"を要求した後に$ '、$ PREMATCHを$ 'に$ POSTMATCHを使用できます。 – Arie

答えて

17

をもたらすであろう。それはだが、Rubyは当初、Perlのから構文の多くを持ち上げます主に今までにそれを乗り越えています:)。など$1$2、正規表現の中括弧のキャプチャを参照してください:/a(.)b(.)c/与え、$1ab$2bc間の文字間の文字になります。 $`$'は、正規表現全体(それ自体は$&)に一致する文字列の前後の文字列をそれぞれ意味します。

歴史的にしか実際には、これらにはある意味があります。 perldoc perlvarで見つけることができます。これは一般に、Perl変数の意図されたニーモニックと履歴を文書化するうえで優れており、主にRubyのグローバルにも適用されます。番号付きキャプチャは、キャプチャ逆参照正規表現構文(\1\2など)の置き換えです。 Perlは、3.xバージョンのどこかで前者から後者に切り替えました。なぜなら、正規表現以外の逆参照構文を使用すると解析が複雑すぎるからです。 (Perl 5が巡回するまでには、パーサーは文法が再び利用できるように十分に書き直されており、すぐに参照/ "ポインタ"のために再利用されていた)Rubyは代わりに名前引用文:を使用した。 Smalltalkスタイル; RubyはSmalltalkスタイルのオブジェクト指向でPerlに類似していたので、これは言語的に意味がありました)。$&も同様です。歴史的な正規表現の構文では単に&です(ただし、置換の一部であるため、代わりに$&という変数になりました)。 $`$'は、一致した文字列からの "back-quote"と "forward-quote"の両方の "cutesy"です。

7

非番のものがここに記載されています:

http://www.zenspider.com/Languages/Ruby/QuickRef.html#19

$1, $2 ... $Nは、正規表現のキャプチャグループでの試合を参照してください。だから、

"ab:cd" =~ /([a-z]+):([a-z]+)/ 

は、彼らが(ちょうどPerlでのように、最新のパターンマッチからのキャプチャだ

$1 = "ab" 
$2 = "cd" 
+0

コロンの後に式の中に括弧([)がないようです。 "ab:cd" =〜/([a-z] +):([a-z] +)/ –

関連する問題