Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中解析URL字符串_Ruby_String_Url_Uri_Tokenize - Fatal编程技术网

在Ruby中解析URL字符串

在Ruby中解析URL字符串,ruby,string,url,uri,tokenize,Ruby,String,Url,Uri,Tokenize,我想用ruby解析一个非常简单的字符串,并试图找到最优雅的解决方案。字符串的格式为 /xyz/mov/exdaf/daeed.mov?arg1=blabla&arg2=3bla3bla 我想要的是: string1:/xyz/mov/exdaf/daeed.mov 字符串2:arg1=blabla&arg2=3bla3bla 那么基本上是什么 但是找不到好的例子。 如果您有任何帮助,我们将不胜感激。在问号上拆分初始字符串 str.split("?") => ["/xyz/mov/exdaf

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

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

那么基本上是什么

但是找不到好的例子。
如果您有任何帮助,我们将不胜感激。

在问号上拆分初始字符串

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

这似乎就是您想要的,字符串内置拆分函数:

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

编辑:呸,变慢;)

我认为最好的解决方案是使用
URI
模块。(您可以执行类似于
URI.parse('your\u URI\u string')的操作。查询
以获取
右侧的部分)请参阅

例如:

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"
002:0>需要“uri”甚至“net/http”
真的
003:0>URI
URI
004:0>URI.parse('/xyz/mov/exdaf/daeed.mov?arg1=bla&arg2=asdf')
#
005:0>URI.parse('/xyz/mov/exdaf/daeed.mov?arg1=bla&arg2=asdf')。查询
“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
在这种情况下更有意义。)

您可以只需要“URI”而不是“net/http”这一点很好;我总是忘记这一点,因为我通常在解析URI之后立即下载一些东西。如果输入总是URL,那么已经有一个URL解析库可能是更好的选择。