您能告诉我通过ruby在此字符串中获取内容my device
和image
的方式
if(my_device=='galaxytab210') { image = 'http:image.com'
非常感谢你!
答案 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)