Как мне убрать некоторые обратные слэши, но не все в Perl? - PullRequest
2 голосов
/ 12 октября 2010

Я использую tinyperl со следующим скриптом:

@lines=<STDIN>;
foreach (@lines) {
    s/\\(.)/($1 eq '"' or $1 eq '\\') ? $1 : '\\' . $1/eg;
    print;
}

Я бы хотел, чтобы каждая обратная косая черта рассматривалась только со следующим символом, и удаляю обратную косую черту, только если следующий символ представляет собой двойную кавычку или другую обратную косую черту. (Я знаю, что эта цель может быть для вас несостоятельной, но не берите в голову).

Например, я бы хотел перевести abc\ndef\\ghi\"\\\n на abc\ndef\ghi"\\n. Но этот скрипт, похоже, переводит его на abcndef\ghi"\n.

Не могли бы вы помочь?

Ответы [ 2 ]

4 голосов
/ 12 октября 2010

Попробуйте

s/\\([\\"])/$1/g;

[] дает класс символов, который соответствует либо обратной, либо двойной кавычке, поэтому мы говорим заменить обратную косую черту, за которой следует либо другая обратная косая черта, либо двойная кавычка на любой символ вкласс персонажа соответствует.

0 голосов
/ 12 октября 2010

Похоже, вам нужно предварительное утверждение ( см. Раздел perlre по расширенным шаблонам ).

s/\\(?=[\\"])//g;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...