我有一個看起來像這樣的列表:正則表達式沒有找到匹配
__DATA__
49103393193[0-9]{1,3};+49103/393193-0;Company 1;Street;Number;Postal Code;City
現在我在加載的大名單使用這些值的哈希看起來像這樣:
%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 =「(」加入(沒有現在「|」,鑰匙%voicePrefix )'')';但它仍然匹配 – alexj 2013-02-20 11:16:23
@alexj,您的代碼還存在另一個問題。查看我的答案更新。 – 2013-02-20 11:33:17
謝謝它的工作原理,但不可能在一個正則表達式中完成它,因爲你的最後一個解決方案使我的代碼變慢,我的6x代碼花了20秒和一個正則表達式,並且需要120秒? – alexj 2013-02-20 11:56:58