繁体   English   中英

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

[英]How do I match a unix absolute path and extract it using perl?

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

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

鉴于:

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

此正则表达式将提取路径名:

m%\s(/.*)%

它会寻找一个空格字符,后跟一个斜杠,后跟任何东西。 如果路径名中没有空格,则可以使用限制性更强的代码:

m%\s(/\S*)%

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM