У меня есть список, который выглядит следующим образом:Regex не находит матч
__DATA__
49103393193[0-9]{1,3};+49103/393193-0;Company 1;Street;Number;Postal Code;City
Теперь я загрузить большой список с этими значениями в к Hash, который выглядит следующим образом:
%voicePrefix = (
'49103393193[0-9]{1,3}' => [
'+49103/393193-0',
'Company 1',
'Street'
'Number'
'Postal Code'
'City'
],
);
Я делаю это, делая это:
my %voicePrefix = map {
chomp;
my @fields = split ';';
shift @fields => \@fields;
} __DATA__;
my $voiceRegex = '(' . join('|',map{quotemeta} keys %voicePrefix) . ')';
Теперь проблема у меня есть еще один список с большим количеством цифр так что позволяет сказать, что я загрузил файл, чтобы @line s, который выглядит следующим образом:
[email protected]__
4910339319344;Test 1
49103393193411;Test 2
49103393193941;Test 3
Теперь то, что я хочу сделать, это использовать регулярные выражения на число я делаю это так, но doesent работать он никогда не находит совпадение
my @lines = __FILEUPTHERE__;
my @line;
my $company;
for(my $i = 0; i < @lines; $i++)
{
#Split Line
@line = split(/,/, $lines[$i]);
#NO MATCH HERE
$company = $voicePrefix{$1}[1] if ($line[0] =~ /$voiceRegex/);
}
Я надеюсь, кто-то может помочь мне с этой проблемой.
Спасибо :)
Я сделал это сейчас с моим $ voiceRegex = «(» Join («|», ключи% voicePrefix). ')'; но он все еще оставил – alexj
@alexj, возникла другая проблема с вашим кодом. См. Обновление моего ответа. – 2013-02-20 11:33:17
Спасибо, что это работает, но разве это невозможно сделать в одном регулярном выражении, потому что ваше последнее решение замедляет мой код, мой 6x потребовалось 20 секунд с одним регулярным выражением, и так требуется 120 секунд? – alexj