用数组表示法理解regexp

时间:2011-04-14 13:11:44

标签: ruby

我遇到了这段代码:

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

我知道正则表达式是如何工作的,但我对数组表示法感到困惑。在[]中放置正则表达式是什么意思,第二个参数1是什么意思?

2 个答案:

答案 0 :(得分: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+)

答案 1 :(得分:2)

括号是String的方法。见http://www.ruby-doc.org/core/classes/String.html

  

如果提供了Regexp,则匹配   str的一部分返回。如果一个   数字或名称参数跟随   正则表达式,该组件   而是返回MatchData。如果   给出一个String,该字符串是   如果它出现在str中则返回同时   如果没有,则返回nil   匹配。

1 表示返回括号内与模式匹配的内容。