Ruby 对 Regexp 和 MatchData 的一个问题

sakura79 · 2014年01月23日 · 最后由 luikore 回复于 2014年01月24日 · 2234 次阅读

代码如下,比如想把 ab+ 的都找出来,比如 gsub 的例子里,都替换成大写的了; 但是怎么从 MatchData 实例里得到第 n(n>1)组匹配结果的信息呢? 类似 php 或者 Java 那样,能取得每组匹配的信息?

类似这个问题:https://www.ruby-forum.com/topic/1435305

irb(main):146:0> a="abbcdefgabbbbcdefg"
=> "abbcdefgabbbbcdefg"
irb(main):147:0> b = a.gsub(/(ab+)/){|y| y.upcase}
=> "ABBcdefgABBBBcdefg"
irb(main):148:0> a="abbcdefgabbbbcdefg"
=> "abbcdefgabbbbcdefg"
irb(main):149:0> x =/(ab+)/.match a
=> #<MatchData "abb" 1:"abb">
irb(main):150:0> x[0]
=> "abb"
irb(main):151:0> x[1]
=> "abb"
irb(main):152:0> x[2]
=> nil
irb(main):153:0> x.length
=> 2
irb(main):154:0> x.offset 1
=> [0, 3]
irb(main):155:0> x.offset 0
=> [0, 3]


a = "abbcdefgabbbbcdefg"
a.scan(/ab+/).to_a[n]

#1 楼 @luikore 不只是找出这些匹配项,还有他们的开始和结束位置。

#2 楼 @sakura79

a.scan(/ab+/){|term| print $`.size, '...', ($`.size + term.size), ':', term, "\n" }
需要 登录 后方可回复, 如果你还没有账号请 注册新账号