Проблемы с записью уникального регулярного выражения в массив в Perl - PullRequest
2 голосов
/ 12 марта 2010

Целью следующего примера кода является чтение содержимого $target и присвоение всех уникальных результатов поиска регулярных выражений массиву.

Я подтвердил, что мое утверждение регулярного выражения работает, поэтому я упрощаю это, чтобы не фокусироваться на нем.

Когда я выполняю скрипт, я получаю список всех результатов регулярных выражений, однако результаты не являются уникальными, что приводит меня к мысли, что мои манипуляции с массивом или моя проверка if (grep{$_ eq $1} @array) { вызывают проблемы.

#!/usr/bin/env perl

$target = "string to search";

$inc = 0;
$once = 1;

while ($target =~ m/(regex)/g) { #While a regex result is returned
        if ($once) { #If $once is not equal to zero
                @array[$inc] = $1; #Set the first regex result equal to @array[0]
                $once = 0; #Set $once equal to zero so this is not executed more than once
        } else {
                if (grep{$_ eq $1 } @array ) { #From the second regex result, check to see if the result is already in the array
                        #If so, do nothing
                } else {
                        @array[$inc] = $1; #If it is not, then assign the regex search result to the next unused position in the array in any position.
                        $inc++; #Increment to next unused array position.
                }
        }
}

print @array;

exit 0;

1 Ответ

6 голосов
/ 12 марта 2010

как насчет этого:

while ($target =~ m/(regex)/g) {
   $hash{$1}++;
}
print keys %hash;

Обновление:

# if the order matters
while ($target =~ m/(a.)/g) { 
    $hash{$1} = ++$i unless $hash{$1};
}
@array = sort {$hash{$a} <=> $hash{$b}} keys %hash;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...