regex - Perl 正则表达式匹配具有特殊字符的字符串

标签 regex perl

我有我需要在 URL 字符串列表中匹配的子字符串列表。子字符串具有特殊字符,如“|”、“*”、“-”、“+”等。如果 URL 字符串包含该子字符串,我需要执行一些操作。但是现在让我们说我将在控制台中打印“TRUE”。

我首先从子字符串列表中读取并将其放入散列中。然后,我尝试对每个 URL 的整个列表执行简单的 Regexp 匹配,直到找到匹配项。代码是这样的。

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;

我在这样的行中得到一个错误,它基本上说“量词在正则表达式中没有任何内容”。我是否需要更改正则表达式匹配语法中的某些内容以避免这些?

最佳答案

您需要转义字符串中的特殊字符。

将字符串括在 \Q 之间和 \E将完成这项工作:

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

关于regex - Perl 正则表达式匹配具有特殊字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5432944/

相关文章:

javascript - 识别以问号结尾的单词并在打字时在其周围放置跨度标签

regex - 如何使用 Perl 进行模式匹配

ajax - 使用 Perl 从 UTF-8 网页上传带有 application/octet-stream 的图像

perl - 为什么这些时间戳与 Perl Time::HiRes 不一致?

perl - Perl 5 中 `write` 和 `format` 的替代品是什么?

perl - 在没有 CPAN 的情况下安装 Perl 模块

JavaScript 正则表达式 : ignore every letter after backslash

java - 为什么 Mattcher 在成功找到后会抛出异常

Javascript 字符串替换 - 最好的方法是什么?

正则表达式帮助,反查询替换