2011-12-23 13 views
0

誰でも私に次のことを説明することができますRubyコードは何ですか?この単純なコードは何をしますか?

VARIABLE.scan /\((.+)\)$/ 

P.S. VARIABLE='aa'場合

VARIABLE=4の場合は、私が[]

を持って、私はコードが何をするん[]

だ???

+0

トライVARIABLEを=(4) – prusswan

+0

あなたはスキャン()メソッドが何をするのか説明できますか? –

+0

http://www.ruby-doc.org/core-1.9.3/String.html#method-i-scan – prusswan

答えて

3
/\((.+)\)$/ 

$は、行末アンカーです。最も外側の()のペアはエスケープされるため、文字列のリテラルカッコと一致します。 .+は1つ以上の文字と一致します。

ので、正規表現は次のように、その中に少なくとも1つの文字と括弧のグループで終わる文字列に一致します。

qdqsqsddq(1) 
sqkldj(azeazeza) 

と、そのグループ内のテキストをキャプチャします。ストリングスルー

(その有用性は少し疑問があるので、それはまた、qsd(qsdq(qsdq)と一致し、その場合には、「戻る」qsdq(qsdqことに留意されたい。)

2
/ # Regex delimiter 
\( # Match "(" 
(.+) # Match and capture one or more (+) characters (.), except newlines 
\) # Match ")" 
$ # Match the end of the line (before any newlines, if present) 
/ # Regex delimiter 

.scan()検索及び配列にすべての一致結果を加算。

したがって、実際には、行内の最初のカッコから始まり、行末の閉じ括弧まで、複数行の文字列内のすべての行の配列を提供します。

1

もう一つは、他の人の投稿に追加する:

If VARIABLE=4, I got [] 

これは、実際に例外をスローします。 VARIABLE = "4"(注:string。Fixnumにはこのようなメソッドはありません)が必要です。

私もいくつかの例に置く:

"(4)".scan /\((.+)\)$/ # -> [["4"]] 
"(42342)".scan /\((.+)\)$/ # -> [["42342"]] 
"abracadabra (42342)".scan /\((.+)\)$/ # -> [["42342"]] 
"abracadabra (42342) (23)".scan /\((.+)\)$/ # -> [["42342) (23"]]. 

# The regex do not match new lines by default. 
"(4)\n(5)\n".scan /\((.+)\)$/ # -> [["4"], ["5"]]. 
"(4)\n(5)\n".scan /\((.+)\)$/m # -> [["4)\n(5"]] 
関連する問題