Как я могу заменить только совпадающий шаблон и вернуть его в одну переменную с помощью Perl?Заменить только в согласованной части шаблона Perl
Например:
my $str = "a.b.AA pat1 BB hgf AA pat1 BB jkl CC pat1 don't change pat1";
Я хочу, чтобы соответствовать pat1
между AA
и BB
и заменить его с оригинальной строки pat2. Тем не менее, я не хочу, чтобы заменить pat1
где-нибудь еще в том же строке
Ожидаемый результат строка:
a.b.AA PAT2 BB hgf AA PAT2 BB jkl CC pat1 don't change pat1
Я уверен, что должен быть какой-то хороший способ сделать это; пожалуйста, порекомендуйте.
Оригинальная строка:
my $ORG_str = 'A.B.C.\\valid.A .\\valid.A.B.C .\\valid.X.Y.Z .p.q.r.s';
Ожидаемое Строка:
my $EXP_op = 'A.B.C.\\valid?A .\\valid?A?B?C .\\valid?X?Y?Z .p.q.r.s';
Заменитель характер .
к ?
только если он находится между обратной косой черты \
и пробельных .
Использование групп захвата является самым простым. –
Ваш исходный сценарий мог бы быть лучше показан '' xxAA pat1 yy pat1 zz BB abc AA pp pat1 qq pat1 rr pat1 ssBB def pat1 ghi pat1 "или что-то в этом роде.Показывая, что множественные появления «pat1» могут появляться между пограничными маркерами AA и BB, наряду с другими символами, помогли бы прояснить проблему. –
Думаю, я убрал сообщение. Но ответ на весь вопрос - это именно то, что делает оператор замещения. Я думаю, что лучший вопрос: «Как сохранить части совпадающего шаблона». Поскольку он сохраняет материал с обеих сторон, мы не можем использовать '\ K'. :( –