Как нажать два значения «найти» и «заменить» - PullRequest
0 голосов
/ 06 мая 2018
my @storedContent = ();
my $string = "some content are stored....";

$string=~s/<whateverfind>/<whateverreplace>/gs && push @storedContent, $&;

print join "\n", @storedContent; #printing just <whateverfind>

Мне нужно хранить найденные и соответствующие замененные строки в массиве.

мой ожидаемый результат:

<whateverfind>     <whateverreplace>
....
....

Как я могу это сделать?

1 Ответ

0 голосов
/ 06 мая 2018

s/// возвращает количество замен, так что вы можете сделать это:

push @storedContent,
    ('<whateverfind>   <whateverreplace>') x $string =~ s/<whateverfind>/<whateverreplace>/g;

Если вы хотите сделать это динамически:

$string =~ s/<whateverfind>/
    my $r = "<whateverreplace>";
    push @storedContent, "$&   $r";
    $r
/eg;

Обратите внимание, что использование $& влечет за собой снижение производительности для всех регулярных выражений в вашей программе в старых версиях Perl, поэтому вы можете использовать вместо этого явные захваты:

$string =~ s/(<whateverfind>)/
    my $r = "<whateverreplace>";
    push @storedContent, "$1   $r";
    $r
/eg;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...