2011-12-23 54 views
0

任何人都可以向我解釋下面的代碼是Ruby的代碼嗎?這個簡單的代碼是做什麼的?

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

P.S.

如果VARIABLE=4,我[]

如果VARIABLE='aa',我[]

是什麼代碼嗎???

+0

嘗試變量=(4) – prusswan 2011-12-23 12:40:04

+0

你能解釋一下什麼是掃描()方法呢? – 2011-12-23 12:40:27

+0

http://www.ruby-doc.org/core-1.9.3/String.html#method-i-scan – prusswan 2011-12-23 12:41:28

回答

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

$是行尾錨點。最外面的()對被轉義,所以它們將匹配字符串中的文字括號。 .+匹配一個或多個字符。

所以正則表達式匹配以括號組結束與中至少有一個字符串,如:

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」(注意:字符串,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"]]