我的应用程序接受来自用户的许多路径,这些路径可能已经或可能没有使用反斜杠终止这些路径。我想确保所有路径都以反斜杠()终止,以便我可以将文件名附加到它们以执行其他各种操作。我在这里挖了很多问题并且找不到解决方案所以我一起攻击了以下内容:
foreach my $path (@Path) {
my $char = chop($path);
if ($char ne '\\') {
$path = $path . $char . '\\';
} else {
$path = $path . '\\';
}
这可能是一种非常可怕的方式,但它确实有效。任何人都可以为我提供正则表达式吗?
答案 0 :(得分:8)
使用File::Spec
构建路径。它更容易,更安全,更便携。
use File::Spec;
for my $path (@Path) {
$path = File::Spec->catfile($path, "foo", "bar");
# $path = "$path\foo\bar" -- regardless of previous line ending
}
答案 1 :(得分:1)
$path =~ s/(?<!\\)$/\\/;
(?<!\\)
是一个负面的lookbehind,如果前一个字符不是反斜杠,则会导致匹配失败,而$
是字符串锚点的结尾。因此,如果最后一个字符是反斜杠,则此正则表达式将无法匹配任何内容,或者如果该字符不是反斜杠,则它将匹配字符串中的最后一个字符。然后我们使用反斜杠作为替换,所以如果正则表达式匹配,我们会在末尾附加一个反斜杠。