Есть ли регулярное выражение для удаления косой черты в Perl? - PullRequest
9 голосов
/ 20 марта 2010

Я хотел бы удалить косую черту из строки. Например, если у меня есть строка с именем $ test = "test /". Как мне удалить косую черту в конце?

Ответы [ 5 ]

12 голосов
/ 20 марта 2010

С регулярным выражением сделайте: $test =~ s/\/$//

Кроме того, если вы уверены, что последний символ будет косой чертой, вы можете использовать функцию chop : chop $test

8 голосов
/ 20 марта 2010

Лично я бы перефразировал это, чтобы избежать смеси "\" и "/"

$test =~ s|/$||

Если вы используете "|" вам не нужно указывать "/"

8 голосов
/ 20 марта 2010

Вы можете использовать оператор замены s///:

$test =~ s{/\z}{};
8 голосов
/ 20 марта 2010

Если вы уверены, что есть один / в конце, вы можете использовать функцию chop:

$test = "test/";
$test = chop($test);

Если вы не уверены, что можете сделать:

$test = "test/";
$test = $1 if($test=~/(.*)\/$/);
0 голосов
/ 03 февраля 2016

Этот фрагмент будет заботиться о конечных слешах, кроме корневого каталога:

#!/usr/bin/perl

my $test = './';
$test =~ s{(.+)/\z}{\1};
print $test."\n";

Вот как это работает:

Первая часть регулярного выражения - s {(. +) / \ Z} - определяет группу в скобках () . На это ссылается \ 1 во второй части регулярного выражения - {\ 1} . В этой группе я определил один или несколько символов - . + -, за которыми сразу следует косая черта, после которой следует абсолютный конец строки - \ z .

Регулярное выражение сохраняет все в скобках, чтобы позже использовать его как \ 1 в спецификации замены (в основном вторая часть).

Это работает очень похоже на типичную стратегию sed, а именно:

echo "./" | sed -e 's:\(..*\)/$:\1:'

Надеюсь, это вам поможет.

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