我有一个网址字符串:
http://ip-address/user/reset/1/1379631719drush/owad_yta75
我需要插入一个短字符串:
在第三次出现“/”之后 help
,以便新字符串为:
http://ip-address/**help**/user/reset/1/1379631719drush/owad_yta75
我不能使用Ruby的string.insert(#, 'string')
,因为IP地址的长度并不总是一样。
我正在考虑使用正则表达式来做到这一点,但我不确定如何找到第三个'/'出现。
答案 0 :(得分:3)
一种方法:
url = "http://ip-address/user/reset/1/1379631719drush/owad_yta75"
url.split("/").insert(3, 'help').join('/')
# => "http://ip-address/help/user/reset/1/1379631719drush/owad_yta75"
答案 1 :(得分:2)
你可以使用这样的正则表达式捕获组:
(.*?//.*?/)(.*)
^ ^ ^- Everything after 3rd slash
| \- domain
\- protocol
<强> Working demo 强>
并使用以下替代品:
\1help/\2
如果您查看Substitution
部分,则可以看到预期的输出
答案 2 :(得分:2)
您忘记的是,URL只是一个主机加上资源的文件路径,因此您应该利用专门用于处理这些工具的工具。虽然起初它看起来似乎不直观,但从长远来看它会更好。
require 'uri'
url = 'http://ip-address/user/reset/1/1379631719drush/owad_yta75'
uri = URI.parse(url)
path = uri.path # => "/user/reset/1/1379631719drush/owad_yta75"
dirs = path.split('/') # => ["", "user", "reset", "1", "1379631719drush", "owad_yta75"]
uri.path = (dirs[0,1] + ['help'] + dirs[1 .. -1]).join('/')
uri.to_s # => "http://ip-address/help/user/reset/1/1379631719drush/owad_yta75"