返回在当前作用域中上次匹配成功正则表达式 MatchData 对象,与调用 $~ 相当。
/(.)(.)/ =~ "ab" p Regexp.last_match # => #<MatchData:0x4599e58> p Regexp.last_match[0] # => "ab" p Regexp.last_match[1] # => "a" p Regexp.last_match[2] # => "b" p Regexp.last_match[3] # => nil
若整数 nth 为 0,返回匹配字符串($&)。否则返回匹配第 nth 组括号的子字符串($1, $2, )。若没有对应的括号或该组括号没有匹配成功,则返回 nil。
/(.)(.)/ =~ "ab" p Regexp.last_match # => #<MatchData:0x4599e58> p Regexp.last_match(0) # => "ab" p Regexp.last_match(1) # => "a" p Regexp.last_match(2) # => "b" p Regexp.last_match(3) # => nil
不带参数的 Regexp.last_match,当整个正则表达式匹配失败时会返回 nil,因此 last_match[1] 的格式会抛出 NameError 异常,相反的 last_match(1) 会返回 nil。
将 string 字符串与正则表达式进行匹配。若参数非字符串或匹配失败,则返回 false;若匹配成功,返回 true。
匹配的信息储存于内建变量 $~ 中。
相当于 self=~str,只是不会返回 MatchData 对象。若匹配失败则返回 nil。
若是只需要用正则表达式匹配子字符串时,可以这样使用 match(str) :
bar = /foo(.*)baz/.match("foobarbaz").to_a[1] _, foo, bar, baz = */(foo)(bar)(baz)/.match("foobarbaz")
to_a 则可以允许出现匹配失败的情况。
生成并返回正则表达式的字符串表达式。既使将返回的字符串嵌入在另一个正则表达式中,依然保留其意义。
re = /foo|bar|baz/i p re.to_s # => "(?i-mx:foo|bar|baz)" p /#{re}+/o # => /(?i-mx:foo|bar|baz)+/
然而,一些包含后位引用的正则表达式可能会出现意想不到的情况。这是因为目前后向引用只可以用数字来指定。
re = /(foo|bar)\1/ # # \1 is foo or bar p /(baz)#{re}/ # \1 is baz # => /(baz)(?-mix:(foo|bar)\1)/