你如何在正则表达式中使用变量?

时间:2011-03-11 17:56:35

标签: ruby-on-rails ruby regex yaml

我正在尝试从此字符串中提取照片ID:30280

"--- !ruby/struct:PhotoJob \nimage_id: 30280\n"

我已经在regex中看到过这种事情,之后你可以找到一些匹配/nimage_id: \d/的参数,然后返回\d

如何从该字符串返回/d或数字30280

4 个答案:

答案 0 :(得分:5)

有趣的是你有一个Ruby Struct,所以你可以做以下事情,让YAML负责解析。

PhotoJob = Struct.new(:image_id)
job = YAML.load("--- !ruby/struct:PhotoJob \nimage_id: 30280\n")
job.image_id
=> 30280

答案 1 :(得分:1)

str = "--- !ruby/struct:PhotoJob \nimage_id: 30280\n"
image_id = str.scan(/\d+/)[0]
#=> "30280"

答案 2 :(得分:1)

使用群组匹配"--- !ruby/struct:PhotoJob \nimage_id: 30280\n".scan(/image_id: (\d+)/)[0]

>> matches = "--- !ruby/struct:PhotoJob \nimage_id: 30280\n".match(/struct:(.*) .*image_id: (\d+)/m)
=> #<MatchData "struct:PhotoJob \nimage_id: 30280" 1:"PhotoJob" 2:"30280">
>> matches[1]
=> "PhotoJob"
>> matches[2]
=> "30280"

答案 3 :(得分:1)

RE = '\nimage_id: (\d+)\n'

围绕\ d +括号定义的组捕获数字