如何匹配unix绝对路径并使用perl提取它?

时间:2012-02-28 06:27:16

标签: regex perl unix

我知道可以使用正则表达式,但我找不到正确的表达式。还有任何可用的内置函数吗?

3 个答案:

答案 0 :(得分:4)

我建议改用File::Spec核心模块。如果您只是需要检查给出的是否是绝对路径,请使用file_name_is_absolute();如果你需要将相对路径转换为绝对路径,使用rel2abs(),你会看到模式。 )它更容易,更易读。

答案 1 :(得分:2)

假设:

bmake: stopped in /bb/cc/xx/yy/zz/aa

这个正则表达式将拉出路径名:

m%\s(/.*)%

它会查找一个空格字符,然后是斜杠,后跟任何内容。如果路径名中没有空格,则可以使用限制性更强的:

m%\s(/\S*)%

如果您确定您的名称总是有一个或多个路径组件,则可以添加更多限制:

m%\s(/\S+/\S*)%

所以它继续下去。您对路径中的有效内容了解得越多,仅匹配文件名的可能性就越大。但请注意,Unix上的文件名可以包含除/之外的任何字符(因为它是路径名称各部分之间的分隔符)和\0(NUL字节)。其他所有内容 - 换行符,标签,控件等 - 都是公平的游戏,可能是文件名的一部分。幸运的是,它们中的大多数通常不存在于文件名中。

请注意,相对路径名比绝对路径名更难。

答案 2 :(得分:1)

/(.+/)*.*使用此模式。一开始是斜线,然后是目录(可能不是任何),最后是文件名或目录名(这可能不是太多)。实际上这将匹配以斜杠开头的所有内容但是没关系,因为unix中的路径可以包含除\0之外的所有内容。