2011-04-14 58 views
4

理解正則表達式我見過這樣的代碼片斷:使用數組方式

erb = "#coding:UTF-8 _erbout = ''; _erbout.concat ..." # string is cut 
erb[/\A(#coding[:=].*\r?\n)/, 1] 

我知道如何表達正規工作,但我很困惑與陣列的符號。在[]中放置正則表達式意味着什麼,第二個參數1是什麼意思?

+1

爲了補充下面已經給出的答案,'String#[regex_or_string]'就像一個'過濾器',它只傳遞匹配'regex_or_string'的原始字符串部分。沒有第二個參數,它通過整個比賽。通過第二個參數'1','2',...它傳遞一個特定的捕獲'$ 1','$ 2',...(也就是第一個加括號部分,第二個加括號部分...)在比賽中。 – sawa 2011-04-14 14:59:40

回答

3

str[regexp]實際上是String類的方法,你可以在這裏找到http://www.ruby-doc.org/core/classes/String.html#M001128

第二個參數1將返回文本相匹配的第一個子模式#coding[:=].*\r?\n,再如爲您更好地理解:

"ab123baab"[/(\d+)(ba+).*/, 0] # returns "123baab", since it is the complete matched text, ,0 can be omitted also 
"ab123baab"[/(\d+)(ba+).*/, 1] # returns "123", since the first subpattern is (\d+) 
"ab123baab"[/(\d+)(ba+).*/, 2] # returns "baa", since the second subpattern is (ba+) 
+0

您不需要第二行代碼的第二個參數。但如果你仍然想要,它應該是'0'。 – sawa 2011-04-14 14:53:11

+0

@sawa謝謝你指出我的錯字 – ZelluX 2011-04-14 17:09:13

2

括號是String的一種方法。見http://www.ruby-doc.org/core/classes/String.html

如果正則表達式被提供,則返回str的匹配 部。如果 數字或名稱參數跟在 正則表達式後面,則返回MatchData的那個組件 。如果給出一個字符串 ,那麼返回字符串 ,如果它發生在str中。在 兩種情況下,如果沒有 匹配,則返回nil。

表示返回括號內模式匹配的內容。

相關問題