Сопоставление регулярных выражений Perl для строк со специальными символами

У меня есть список подстрок, которые мне нужно сопоставить в список строк URL. Подстроки имеют специальные символы, такие как '|', '*', '-', '+' и т. Д. Если строки URL-адреса содержат эту подстроку, мне нужно выполнить некоторую операцию. Но пока давайте просто скажем, что я напечатаю «ИСТИНА» в консоли.

Я сделал это, сначала прочитав список подстрок и поместив его в хеш. Затем я попытался выполнить простое сопоставление Regexp всего списка для каждого 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;

Я получаю ошибку в таких строках, которые в основном говорят: «Квантификатор ничего не следует в регулярном выражении». Нужно ли мне что-то изменить в синтаксисе сопоставления регулярных выражений, чтобы избежать этого?

5
задан sfactor 25 March 2011 в 13:26
поделиться