Regexp

正则表达式 的类,详细请参考 正则表达式

超类

类方法

Regexp.last_match

返回在当前作用域中上次匹配成功正则表达式 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
Regexp.last_match([nth])

若整数 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。

方法

self =~ string
self === string

将 string 字符串与正则表达式进行匹配。若参数非字符串或匹配失败,则返回 false;若匹配成功,返回 true。

匹配的信息储存于内建变量 $~ 中。

string 非 nil 也非 String 对象,抛出 TypeError )异常。

match(str)

相当于 self=~str,只是不会返回 MatchData 对象。若匹配失败则返回 nil。

若是只需要用正则表达式匹配子字符串时,可以这样使用 match(str) :

bar = /foo(.*)baz/.match("foobarbaz").to_a[1]
_, foo, bar, baz = */(foo)(bar)(baz)/.match("foobarbaz")

to_a 则可以允许出现匹配失败的情况。

to_s

生成并返回正则表达式的字符串表达式。既使将返回的字符串嵌入在另一个正则表达式中,依然保留其意义。

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)/