理解正則表達式我見過這樣的代碼片斷:使用數組方式
erb = "#coding:UTF-8 _erbout = ''; _erbout.concat ..." # string is cut
erb[/\A(#coding[:=].*\r?\n)/, 1]
我知道如何表達正規工作,但我很困惑與陣列的符號。在[]
中放置正則表達式意味着什麼,第二個參數1
是什麼意思?
理解正則表達式我見過這樣的代碼片斷:使用數組方式
erb = "#coding:UTF-8 _erbout = ''; _erbout.concat ..." # string is cut
erb[/\A(#coding[:=].*\r?\n)/, 1]
我知道如何表達正規工作,但我很困惑與陣列的符號。在[]
中放置正則表達式意味着什麼,第二個參數1
是什麼意思?
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+)
括號是String的一種方法。見http://www.ruby-doc.org/core/classes/String.html:
如果正則表達式被提供,則返回str的匹配 部。如果 數字或名稱參數跟在 正則表達式後面,則返回MatchData的那個組件 。如果給出一個字符串 ,那麼返回字符串 ,如果它發生在str中。在 兩種情況下,如果沒有 匹配,則返回nil。
表示返回括號內模式匹配的內容。
爲了補充下面已經給出的答案,'String#[regex_or_string]'就像一個'過濾器',它只傳遞匹配'regex_or_string'的原始字符串部分。沒有第二個參數,它通過整個比賽。通過第二個參數'1','2',...它傳遞一個特定的捕獲'$ 1','$ 2',...(也就是第一個加括號部分,第二個加括號部分...)在比賽中。 – sawa 2011-04-14 14:59:40