我如何在Perl字符串中取消反斜杠?

时间:2010-01-22 06:09:34

标签: regex perl

我需要将输入地址转换为指定格式

#!/usr/bin/perl
my $file_path ="\\\abc.com\a\t\temp\L\\";

#---- Help in this regex
$file_path =~ s//\//\/gi;

#---- Output format needed
#$file_path ="\\abc.com\a\t\temp\L\";
printf $file_path;

3 个答案:

答案 0 :(得分:5)

我猜你想要规范化UNC路径,在这种情况下,开始时的双\很重要,而Ether和KennyTM的答案会产生错误的结果。选择以下任一方法。

use File::Spec qw();
print File::Spec->canonpath('\\\abc.com\a\t\temp\L\\');

use URI::file qw();
print URI::file->new('\\\abc.com\a\t\temp\L\\', 'win32')->dir('win32');

__END__
\\abc.com\a\t\temp\L\

答案 1 :(得分:2)

如果\中的my $file_path不是转义字符,

s/^\\\\|\\\\$/\\/g

答案 2 :(得分:2)

您似乎想要做的是将\\的每次出现都展开到\。但是,当您在regexp中实际使用它时,您需要转义\的每次出现,如下所示:

use strict; use warnings;

my $a = '\\\abc.com\a\t\temp\L\\';

# match \\\\ and replace with \\
(my $b = $a) =~ s/\\\\/\\/g;
print $b . "\n";

...产生文字字符串:

\abc.com\a\t\temp\L\

请注意,我没有像你那样用双引号指定输入字符串。还不完全清楚你正在开始的 literal 字符串是什么,好像它是用双引号指定的,它需要有更多的反斜杠(每两个反斜杠变成一个)。请参阅perldoc perlop下的插值讨论,正如我在回答您的其他问题时所提到的那样。