Maxsus belgilarga ega satrlar uchun Perl regexp moslashuvi

Menda URL satrlari ro'yxatiga mos kelishim kerak bo'lgan pastki qatorlar ro'yxati bor. Pastki satrlarda '|', '*', '-', '+' va hokazo kabi maxsus belgilar mavjud. Agar URL satrlari o'sha pastki qatorni o'z ichiga olgan bo'lsa, men biroz operatsiya qilishim kerak. Ammo hozircha konsolda "TRUE" ni chop etaman.

Men buni birinchi navbatda pastki qatorlar ro'yxatidan o'qish va uni xeshga qo'yish orqali qildim. Keyin moslik topilmaguncha har bir URL uchun butun ro'yxatning oddiy Regexp mosligini bajarishga harakat qildim. Kod shunga o'xshash narsa.

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;

Muammo shundaki, pastki satrlarda juda ko'p maxsus belgilar mavjud bo'lib, ular $hhfile[9] =~ /$ads_list_hash{$count}/ moslashuvida xatolarga olib keladi. Bir nechta misollar;

+adverts/
.to/ad.php|
/addyn|*|adtech;

Men shunga o'xshash satrlarda xatoga yo'l qo'yaman, bu asosan "Quantifier regexp'da hech narsaga ergashmaydi". Bunga yo'l qo'ymaslik uchun regexp mos sintaksisida biror narsani o'zgartirishim kerakmi?


person sfactor    schedule 25.03.2011    source manba
comment
Agar siz shunchaki pastki qatorni topmoqchi bo'lsangiz, unda regex biroz ortiqcha bo'lib tuyuladi... Buning sababi bormi? index sizga kerakli narsani qilmayaptimi?   -  person jswolf19    schedule 25.03.2011
comment
Perl-da maxsus belgilar bilan qanday ishlash mumkin regex?   -  person daxim    schedule 25.03.2011


Javoblar (1)


Satrdagi maxsus belgilardan qochishingiz kerak.

\Q va \E orasidagi satrni qo'shish vazifani bajaradi:

if($hhfile[9] =~ /\Q$ads_list_hash{$count}\E/) {
person codaddict    schedule 25.03.2011