Как я могу удалить обратную косую черту в строке Perl? - PullRequest
0 голосов
/ 22 января 2010

Мне нужно преобразовать входной адрес в указанный формат

#!/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 ]

5 голосов
/ 22 января 2010

Я предполагаю, что вы хотите нормализовать путь 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\
2 голосов
/ 22 января 2010

То, что вы хотите сделать, - это свернуть каждое вхождение от \\ до \. Однако вам нужно избегать каждого вхождения \, когда вы фактически используете его в своем регулярном выражении, например:

use strict; use warnings;

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

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

... что дает строку literal :

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

Обратите внимание, что я не указал входную строку в двойных кавычках, как вы. Не совсем понятно, с какой строки literal вы начинаете, как если бы она была указана в двойных кавычках, она должна иметь больше обратных слешей (каждые два обратных слеша становятся равными одному). См. Обсуждение интерполяции в разделе perldoc perlop , как я уже упоминал в ответе на ваш другой вопрос.

2 голосов
/ 22 января 2010

Если ваши \ в my $file_path не являются escape-символами,

s/^\\\\|\\\\$/\\/g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...