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

Regex 如何匹配unix绝对路径并使用perl提取它?,regex,perl,unix,Regex,Perl,Unix,我知道可以使用正则表达式,但我找不到合适的。还有任何内置函数可以执行此操作吗?/(.+/)*。使用此模式。首先是斜杠,然后是目录(可能不是任何目录),最后是文件名或目录名(可能不是太多)。实际上,这将匹配以斜杠开头的所有内容,但这没关系,因为unix中的路径可以包含除\0之外的所有内容,我建议改用核心模块。如果您只需要检查提供给您的是否是绝对路径,请使用file\u name\u is\u absolute();如果需要将相对路径转换为绝对路径,请使用rel2abs(),您将看到该模式。)它更容

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

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

之外的所有内容,我建议改用核心模块。如果您只需要检查提供给您的是否是绝对路径,请使用
file\u name\u is\u absolute()
;如果需要将相对路径转换为绝对路径,请使用
rel2abs()
,您将看到该模式。)它更容易阅读。

给定:

bmake: stopped in /bb/cc/xx/yy/zz/aa
此正则表达式将提取路径名:

m%\s(/.*)%
它寻找一个空格字符,后跟斜杠,后跟任何字符。如果路径名中没有空格,则可以使用限制性更强的:

m%\s(/\S*)%
如果确定名称中始终有一个或多个路径组件,则可以添加更多限制:

m%\s(/\S+/\S*)%
就这样继续下去。您越了解路径中的有效内容,就越有可能只匹配文件名。但请注意,Unix上的文件名可以包含除
/
(因为它是路径名各部分之间的分隔符)和NUL字节
\0
之外的任何字符。其他所有东西——换行符、选项卡、控件等——都是公平的游戏,可能是文件名的一部分。幸运的是,它们中的大多数通常不以文件名出现


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

您能更清楚地解释一下您想要什么吗?您到底想匹配和提取什么?你能给出一些你想要匹配的输入字符串的例子吗&不匹配,以及你想要什么样的输出?没有一些额外的限制,它们不能。现代*nix路径可以包含除
\0
以外的任何字符。也就是说,如果你愿意,你可以有一条看起来像句子的路径。对于绝对路径名,唯一可以使用的是一个前导斜杠。“bmake:stopped in/bb/cc/xx/yy/zz/aa”。从这里,我只想提取/bb/cc/xx/yy/zz/aa在这种情况下,我建议匹配
bmake:stopped in
,然后选择它后面的内容。像(.*/\Unmatched[in regex;由@karthikA标记)中的
/stopped一样,您的分隔符是
/
,因此您不能在正则表达式中使用未替换的斜杠。请使用另一个分隔符,例如
m.+/(.+)*.*.