/events/3122671255551936/?ref=br_rs&action_history=null
我想在'/ events /'之后和'/?ref = br_rs之前提取数字... \
答案 0 :(得分:1)
您可以按/
字符拆分:
irb(main):003:0> "/events/3122671255551936/?ref=br_rs&action_history=null".split("/")[2]
=> "3122671255551936"
答案 1 :(得分:0)
您还可以使用String#scan方法获取数字:
"/events/3122671255551936/?ref=br_rs&action_history=null".scan(/\d+/).join
# => "3122671255551936"
答案 2 :(得分:0)
如果您的字符串为str
:
x = str["/events/".size..-1].to_i
#=> 3122671255551936
如果你想要字符串:
x.to_s
#=> "3122671255551936"
答案 3 :(得分:0)
您正在查看来自网址的路径。基本的split
最初会起作用:
str = '/events/3122671255551936/?ref=br_rs&action_history=null'
str.split('/')[2] # => "3122671255551936"
现有的工具可以轻松实现这一点,并且可以在处理URL时处理特殊字符的编码和解码:
require 'uri'
str = '/events/3122671255551936/?ref=br_rs&action_history=null'
scheme, userinfo, host, port, registry, path, opaque, query, fragment = URI.split(str)
scheme # => nil
userinfo # => nil
host # => nil
port # => nil
registry # => nil
path # => "/events/3122671255551936/"
opaque # => nil
query # => "ref=br_rs&action_history=null"
fragment # => nil
uri = URI.parse(str)
path
访问网址的路径组件:
uri.path # => "/events/3122671255551936/"
轻松获取价值:
uri.path.split('/')[2] # => "3122671255551936"
现在,想象一下,如果该网址有一个方案,并且像“http://www.example.com/”这样的主机具有前缀,就像大多数网址一样。 (已经写了数百个蜘蛛和刮刀,我知道遇到这样的变化是多么容易。)使用天真的split('/')
会立即破坏:
str = 'http://www.example.com/events/3122671255551936/?ref=br_rs&action_history=null'
str.split('/')[2] # => "www.example.com"
这意味着任何依赖于split
的解决方案都会破坏,以及任何其他尝试根据整个字符串找到值的位置的解决方案。
但是使用为工作设计的工具,代码将继续工作:
uri = URI.parse(str)
uri.path.split('/')[2] # => "3122671255551936"
请注意它是多么简单易读,它将转移到更容易维护。它甚至可以简化为:
URI.parse(str).path.split('/')[2] # => "3122671255551936"
并继续工作。
这是因为URL / URI是商定的标准,因此可以编写解析器来拆分和构建符合标准的字符串。
有关详细信息,请参阅URI文档。