我试图使用正则表达式找到UNIX样式路径的子路径,我采用三个参数:
root
要比较的目录。minDepth
所需的最低级别。maxDepth
要匹配的最高级别数量。我创建了以下函数(@items
在别处定义):
module Navigation
def dig (root = nil, minDepth = 1, maxDepth = nil)
root ||= "/"
@items.select{ |i| !(i.path =~ %r{"\A#{root}(.*?/){#{minDepth},#{maxDepth}}"}).nil? }
end
end
我的问题是让正则表达式服从maxDepth
,目前正则表达式找到一个匹配项,即使路径中有更多级别它没有包含在匹配中。例如:
路径/foo/bar/daz/bag/cop/fig/leg
与正则表达式%r{\A/foo(.*?/){1,3}}
匹配,但只有/foo/bar/daz/
匹配。如果匹配后的任何一点有正斜杠,我如何修改我的正则表达式不匹配?
这样:/foo/bar/daz/hey
会匹配,但/foo/bar/daz/hey/
不会。
我试图使用否定前瞻但不是很成功,很可能我没有正确使用它们。
答案 0 :(得分:1)
这可行吗?
\A/foo(/[^/]*?){1,3}\Z
module Navigation
def dig (root = nil, minDepth = 1, maxDepth = nil)
root ||= "/"
@items.select{ |i| !(i.path =~ %r{"\A#{root}(/[^/]*?){#{minDepth},#{maxDepth}}\Z"}).nil? }
end
end