我想知道是否有人知道如何形成一个正则表达式,以帮助匹配最后出现的斜线文件路径,如:
fred/george/simpson/kill
应该得到结果 - > fred/george/simpson/
abc/def/ghi/..v/file.jpg
应该得到结果 - > abc/def/ghi/..v/
任何建议都将受到赞赏。
感谢回复实际ID要重新构造问题,我不确定我是否应该将其作为一个新线程开始....我实际上需要匹配正则表达式中两个'/'之间的所有内容,例如:tom / jack / sam / jill / --->我需要匹配吉尔
并且在这种情况下还需要匹配tom / jack / sam(没有最后的'/')
赞赏的想法!
答案 0 :(得分:3)
您可以在这里使用File.dirname
。
> File.dirname("fred/george/simpson/kill")
=> "fred/george/simpson"
> File.dirname("abc/def/ghi/..v/file.jpg")
=> "abc/def/ghi/..v"
如果需要,您可以附加一个尾部斜杠。
答案 1 :(得分:1)
你应该在没有正则表达的情况下这样做。只需找到最右边的/
并从那里切片。
file = 'fred/george/simpson/kill'
last_slash = file.rindex('/')
parent_file = file[0..last_slash] if last_slash
=>fred/george/simpson/
答案 2 :(得分:0)
使用[^\/]*$
作为模式:
'fred/george/simpson/kill'.sub(/[^\/]*$/, '') => "fred/george/simpson/"
'abc/def/ghi/..v/file.jpg'.sub(/[^\/]*$/, '') => "abc/def/ghi/..v/"
答案 3 :(得分:0)
试试这个正则表达式:
((?<=/).[^/]*?)$
并替换为'';
答案 4 :(得分:0)
正则表达并非适合所有人。 Rob Pike warns of them with reason.
(.*\/).*\/$
话虽如此,上述(未经测试的!)将与您在捕获组1中所需的匹配。
让我提醒你:尽管你不理解它们,但最好还是想要使用捕获组。 bsd的答案显然更好。