假设我有以下网址:/members/some/path/route
我想要一个仅返回/some/path/route
到目前为止,我有[^\/]\/.*
但是,当它返回s/some/path/route
有人可以帮我一把吗?我也喜欢它,如果有人可以告诉我为什么我的正则表达式不起作用,所以我可以了解它为什么不起作用。
我使用红宝石。
答案 0 :(得分:1)
假设您使用的是javascript:
你的正则表达式将是
result = url.match(/(?:\/.*?)(\/.*)/g);
,您期望的字符串将保存在result[1]
如果使用 RUBY
if url =~ /(?:\/.*?)(\/.*)/
result = $~[1]
end
OR
regexp = /(?:\/.*?)(\/.*)/
match = regexp.match(url)
if match
result = match[1]
else
result = ""
end
答案 1 :(得分:0)
你需要找到第二个" /"其余的
preg_match("/\/(.*?)(\/.*)/", $url, $preg);
print_r($preg);
返回
Array
(
[0] => /members/some/path/route
[1] => members
[2] => /some/path/route
)
但是,我建议不要使用RegExp,因为它是一个简单的字符串,explode()函数会这样做
$path_array = array_slice(explode("/", $url), 2); // we are slicing at 2, because there is a leading '/' at the beginning
$new_path = "/".implode("/", $path_array);
echo $new_path;
答案 2 :(得分:0)
我不会使用正则表达式。相反,我会使用Pathname#each_filename来构造一个数组,其元素是路径的每个组成部分。
str = "/members/some/path/route"
require "pathname"
Pathname(str).each_filename.to_a[1..-1].join('/')
#=> "some/path/route"
我们看到了:
Pathname(str).each_filename.to_a[1..-1]
#=> ["members", "some", "path", "route"]
这使用类方法Kernel::Pathname
。我找不到相应的文档(与Object的文档一样),但我们可以验证:
method(:Pathname).owner
#=> Kernel
这与类方法Kernel::Array,Kernel::String和其他方法类似:
Array(21) # => [21]
String(19) # => "19"
你可以写一下:
Pathname.new(str).each_filename.to_a[1..-1].join('/')
#=> "some/path/route"