正则表达式匹配字符串到最后一次出现的“/”

时间:2013-08-03 09:42:09

标签: ruby regex

我想知道是否有人知道如何形成一个正则表达式,以帮助匹配最后出现的斜线文件路径,如:

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(没有最后的'/')

赞赏的想法!

5 个答案:

答案 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的答案​​显然更好。