正则表达式获取ruby中两个单引号之间的内容

时间:2014-04-20 15:22:50

标签: ruby regex string

您能告诉我通过ruby在此字符串中获取内容my deviceimage的方式

if(my_device=='galaxytab210') { image = 'http:image.com'

非常感谢你!

2 个答案:

答案 0 :(得分:1)

str = %q|if(my_device=='galaxytab210') { image = 'http:image.com'|
my_device, image = str.scan(/'([^']+)'/).flatten

答案 1 :(得分:1)

有趣的是,对一些代码进行基准测试可以发现使用环视而不是捕获组和数组#flatten的一些非常效率很低。

编辑注意:修正了Arie指出的代码,捕获+展平方法似乎更有效。这可能是由于Array操作的速度,它类似于C代码(因此更简单地建模),它们被写入MRI ruby​​中。

#!/usr/bin/env ruby

require 'benchmark'

str = "if(my_device=='galaxytab210') { image = 'http:image.com'"

def with_lookaround(str)
  str.scan(/(?<=')[^'\s]+(?=')/)
end

def with_flatten(str)
  str.scan(/'([^']+)'/).flatten
end

repetitions = 1_000_000

Benchmark.bm do |bm|
  bm.report('with lookaround') { repetitions.times { with_lookaround(str) } }
  bm.report('with array flatten') { repetitions.times { with_flatten(str) } }
end

__END__

           user     system      total        real
with lookaround  5.140000   0.020000   5.160000 (  5.181926)
with array flatten  4.950000   0.020000   4.970000 (  5.041639)

       user     system      total        real
with lookaround  5.200000   0.020000   5.220000 (  5.281581)
with array flatten  4.680000   0.020000   4.700000 (  4.755978)