У меня есть список подстрок, которые мне нужно сопоставить в списке строк URL.Подстроки имеют специальные символы, такие как «|», «*», «-», «+» и т. Д. Если строки URL содержат эту подстроку, мне нужно выполнить некоторые операции.Но сейчас давайте просто скажем, что я напечатаю «ИСТИНА» в консоли.
Я сделал это, сначала прочитав список подстрок и поместив его в хеш.Затем я попытался выполнить простое сопоставление регулярных выражений всего списка для каждого URL, пока совпадение не будет найдено.Код выглядит примерно так:
open my $ADS, '<', $ad_file or die "can't open $ad_file";
while(<$ADS>) {
chomp;
$ads_list_hash{$lines} = $_;
$lines ++;
}
close $ADS;
open my $IN, '<', $inputfile or die "can't open $inputfile";
my $first_line = <$IN>;
while(<$IN>) {
chomp;
my @hhfile = split /,/;
for my $count (0 .. $lines) {
if($hhfile[9] =~ /$ads_list_hash{$count}/) {
print "$hhfile[9]\t$ads_list_hash{$count}\n";
print "TRUE !\n";
last;
}
}
}
close $IN;
Проблема в том, что подстроки содержат много специальных символов, что вызывает ошибки в совпадении $hhfile[9] =~ /$ads_list_hash{$count}/
.Вот несколько примеров:
+adverts/
.to/ad.php|
/addyn|*|adtech;
Я получаю сообщение об ошибке в таких строках, которое в основном говорит: «Quantifier ничего не следует в регулярном выражении».Нужно ли что-то менять в синтаксисе сопоставления регулярных выражений, чтобы избежать этого?