使用Ruby从字符串中获取id

使用Ruby从字符串中获取id,ruby,regex,string,Ruby,Regex,String,我有这样的字符串: “/detail/205193 foo var bar foo.html” “/detail/183863 parse foo.html” “/detail/1003 bar foo bar.html” 如何使用Ruby从it中获取ID(2051931838631003)?regex=/\/detail\/(\d+)-/ regex = /\/detail\/(\d+)-/ s = "/detail/205193-foo-var-bar-foo.html" id = re

我有这样的字符串:

  • “/detail/205193 foo var bar foo.html”
  • “/detail/183863 parse foo.html”
  • “/detail/1003 bar foo bar.html”
如何使用Ruby从it中获取ID(2051931838631003)?

regex=/\/detail\/(\d+)-/
regex = /\/detail\/(\d+)-/
s = "/detail/205193-foo-var-bar-foo.html"
id = regex.match s  # => <MatchData "/detail/205193-" 1:"205193">
id[1]               # => "205193"
$1                  # => "205193"
s=“/detail/205193 foo var bar foo.html” id=regex.match s#=> id[1]#=>“205193” $1 # => "205193"
MatchData
对象将在第一个元素中存储字符串的整个匹配部分,以及从第二个元素开始的任何匹配子组(取决于有多少匹配子组)


另外,Ruby提供了一个快捷方式,可以找到最近匹配的子组,其中
$1

也可以这样做

s = "/detail/205193-foo-var-bar-foo.html"
num = (s =~ /detail\/(\d+)-/) ? Integer($1) : nil
"/detail/205193-foo-var-bar-foo.html".gsub(/\/detail\//,'').to_i
 => 205193

一个简单的方法是去掉字符串中的
/detail/
部分,然后只需调用
来查看剩下的内容:

“/detail/1003 bar foo bar.html”.gsub(“/detail/”,”).to_i#=>1003

只需说
s[/\d+/]


可能的DUP:-:2:无效的正则表达式;没有以前的模式,“+”将在10:/detail\/(+d)处定义基数-/
[
 "/detail/205193-foo-var-bar-foo.html",
 "/detail/183863-parse-foo.html",
 "/detail/1003-bar-foo-bar.html"
].each { |s| puts s[/\d+/] }