Perl: Как заменить контент после шаблона ЗАКРЫТО - PullRequest
0 голосов
/ 26 ноября 2018

Так что я не могу использовать переменную $ '

Но мне нужно найти шаблон, который в файле, который начинается со строки «by:», за которой следуют любые символы, затем заменяет любые символы после «на:”С существующей строкой $ foo

im, использующей $ ^ I и цикл while, так как мне нужно обновить несколько полей в файле.

Я думал что-то вроде [s ///]

s/(by\:[a-z]+)/$foo/i

Мне нужна помощь.Да, это вопрос задания, но я 5 часов, и я потерял много клеток мозга в процессе

1 Ответ

0 голосов
/ 26 ноября 2018

Некоторые проблемы с заменой:

  1. Вы говорите, что хотите соответствовать by: (пробел после двоеточия), но ваше регулярное выражение никогда не будет соответствовать пробелу.
  2. Шаблон[a-z]+ означает совпадение одного или нескольких вхождений букв от a до z.Но вы сказали, что хотите соответствовать «любым персонажам».Это может быть ноль символов и оно может содержать не буквы.
  3. Вы заменили совпадение на $foo, но потеряли by:.Вся совпадающая строка заменяется заменой.
  4. Нет необходимости экранировать : в вашем шаблоне.
  5. Вы фиксируете все совпадение в скобках, но нигде не используете это.

Я предполагаю, что вы обрабатываете файл построчно.Вы хотите «начинается со строки by:, за которой следуют любые символы».Это регулярное выражение:

/^by: .*/

^ соответствует началу строки.Тогда by: соответствует именно этим символам.. соответствует любому символу, кроме новой строки, а * означает ноль или более предыдущего элемента.Так что .* соответствует всем остальным символам в строке.

"замените любые символы, которые следуют после by:, на существующую строку $foo. Я предполагаю, что вы имеете в виду содержимое переменной $foo а не буквенные символы $foo. Это:

s/^by: .*/by: $foo/;

Поскольку мы сопоставили by:, я повторил его в строке замены, потому что вы хотите сохранить его. $foo будет интерполирован встрока замены.

Другой способ написать это будет:

s/^(by: ).*/$1$foo/

Здесь мы захватили текст by: в первом наборе скобок. Этот текст будет доступен впеременная $1, поэтому мы можем интерполировать ее в строку замены.

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