在Ruby中解析URL字符串

7

我有一个非常简单的字符串想要在Ruby中解析,并试图找到最优雅的解决方案。该字符串的格式为: /xyz/mov/exdaf/daeed.mov?arg1=blabla&arg2=3bla3bla

我想要的是: string1: /xyz/mov/exdaf/daeed.mov string2: arg1=blabla&arg2=3bla3bla

所以基本上就是在“?”上进行标记化。

但是找不到一个好的例子。 任何帮助将不胜感激。

3个回答

11

我认为最好的解决方案是使用URI模块。(您可以像这样执行URI.parse('your_uri_string').query来获取?右边的部分。)请参阅http://www.ruby-doc.org/stdlib/libdoc/uri/rdoc/

示例:

002:0> require 'uri' # or even 'net/http'
true
003:0> URI
URI
004:0> URI.parse('/xyz/mov/exdaf/daeed.mov?arg1=bla&arg2=asdf')
#<URI::Generic:0xb7c0a190 URL:/xyz/mov/exdaf/daeed.mov?arg1=bla&arg2=asdf>
005:0> URI.parse('/xyz/mov/exdaf/daeed.mov?arg1=bla&arg2=asdf').query
"arg1=bla&arg2=asdf"
006:0> URI.parse('/xyz/mov/exdaf/daeed.mov?arg1=bla&arg2=asdf').path
"/xyz/mov/exdaf/daeed.mov"

否则,您可以使用正则表达式进行捕获:/^(.*?)\?(.*?)$/。然后$1$2就是您想要的内容。(在这种情况下,使用URI更有意义。)


你可以只使用'require 'uri''而不是'require 'net/http''。 - glenn jackman
好观点;我总是忘记这一点,因为我通常在解析URI之后立即下载某些东西。 - Benjamin Oakes

10

将初始字符串按照问号分割。

str.split("?")
=> ["/xyz/mov/exdaf/daeed.mov", "arg1=blabla&arg2=3bla3bla"]

4
如果输入总是URL,则已经有一个URL解析库可以作为更好的选择。 - Benjamin Oakes

6

这似乎是您正在寻找的内容,字符串内置的分割函数:

"abc?def".split("?") => ["abc", "def"]

Edit: Bah, to slow ;)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接