не может получить правильную многострочную замену perl - PullRequest
0 голосов
/ 19 сентября 2018

У меня проблемы с пониманием того, как многострочное сопоставление работает в Perl. У меня есть файл, в котором я хочу удалить любое отображение:

@keyword{

или

@keyword
{

в обоих случаях,@ - это первый символ строки.

Я могу сделать это с помощью двух отдельных инструкций (с 'perl -p0777'):

s/\n\@keyword\{//
s/\n\@keyword\n\{//

, но я подумал, что следующее тоже будет работать

s/\n\@keyword\n?\{//

и это не так.Он не уловил второй случай, и я не могу понять, почему ???

какое-либо объяснение?

1 Ответ

0 голосов
/ 19 сентября 2018

Аааааа!только что получил.Из-за perl -p0777 весь файл занимает только одну строку, выражения сопоставляются один раз для всего файла, поэтому каждый оператор соответствует ровно одному шаблону.Решением было поставить 'g' в конце:

s/\n\@keyword\n?\{//g

Но теперь еще один.

Сначала я запустил без опции -0777 и подумал, что

s/^\@keyword\n?\{//m

будет работать.Но опять-таки это не уловило второй случай (узор на две строки).Вы можете объяснить, почему?

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