Perl - использование регулярного выражения для поиска всех экземпляров и замены только первого - PullRequest
2 голосов
/ 08 февраля 2010

Я хотел бы найти все экземпляры и заменить все по отдельности, даже если они идентичны.

#!/usr/bin/perl
use strict;
use warnings;

my %dataThing;
my $x=0;
my $data = "1 - 2 - 2 - 4 - 7 - 343 - 3 - 1";
if( my @dataArray = ( $data =~ m/([0-9]+)/gis )){
    foreach( @dataArray ) {
        my $replace = "[thing-" . $x . "]";
        # somehow replace $_ with above
        ...
        # add to an array to store later
        $dataThing{$replace} = $_;
        $x++;
    }
}

так что вывод будет;

[thing-1] - [thing-2] - [thing-3] - [thing-4] - [thing-5] - [thing-6] - [thing-7] - [thing-8] 

не

[thing-1] - [thing-2] - [thing-2] - [thing-3] - [thing-4] - [thing-5] - [thing-6] - [thing-1] 

Это было бы возможно в PHP, циклически перебирая массив и используя str_replace с пределом функции, установленным в 1.

1 Ответ

3 голосов
/ 08 февраля 2010

Вы можете использовать модификатор "e" для оператора подстановки, чтобы оценить произвольный код на стороне замены. Этот код может подсчитать, сколько раз ему звонили, и вернуть этот номер.

my $data = "1 - 2 - 2 - 4 - 7 - 343 - 3 - 1";

my $x=0;
$data =~ s/([0-9]+)/"[thing-" . ++$x . "]"/ges;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...