当模式位于变量中时,如何在perl中匹配复杂的未知模式?

当模式位于变量中时,如何在perl中匹配复杂的未知模式?,perl,pattern-matching,Perl,Pattern Matching,用户提供了一个包含模式的配置文件。基本上,模式可以是任何东西,字母表、数字、空格、大括号和特殊字符的组合。 模式例如: 我对perl非常陌生,很难处理这个问题 我的代码: for (<FH>) { for ( my $j = 0 ; $j < $num_pat ; $j = $j + 1 ) { print "This is the pattern : $pat_array[$j] \n"; if ( $_ =~ m/'$pat_arra

用户提供了一个包含模式的配置文件。基本上,模式可以是任何东西,字母表、数字、空格、大括号和特殊字符的组合。 模式例如:

我对perl非常陌生,很难处理这个问题

我的代码:

for (<FH>) {
    for ( my $j = 0 ; $j < $num_pat ; $j = $j + 1 ) {
        print "This is the pattern : $pat_array[$j] \n";
        if ( $_ =~ m/'$pat_array[$j]'/ ) {
            print "$_ : match found for $pat_array[$j] \n";
            #print "KPI for the pattern is : $kpi_array[$match] : array style \n";
            $match_count[$j] = ( $match_count[$j] + 1 );
        }
    }
}
(){ 对于(我的$j=0;$j<$num_pat;$j=$j+1){ 打印“这是模式:$pat_数组[$j]\n”; if($\uu=~m/'$pat\u数组[$j]'/){ 打印“$\:为$pat\u数组[$j]\n]找到匹配项”; #打印“模式的KPI为:$KPI\u数组[$match]:数组样式\n”; $match_count[$j]=($match_count[$j]+1); } } } 阵列有多个阵列。 我正在尝试使用:if($\u=~ m/'$pat\u数组[$j]'/)查找匹配项。 它适用于简单模式,但不适用于示例中的模式


请帮助我继续。

您需要引用特殊字符。 看

您还可以使用速记
\Q$variable\E
语法,如下所示:

if ($string =~ m/\Q$pattern\E/) { ... }

现在,任何特殊字符都将被逐字匹配。

为了能够给出关于模式不匹配原因的有意义的答案,我们需要一些示例数据,然后我们可以告诉您。我想说可能是因为你引用的是
$pat_array[$j]
,但这可能是因为你没有正确转义元字符。你给出的示例肯定不是有效的正则表达式-
**
,没有转义是绝对不允许的。我投票决定结束这个问题,因为不清楚你有什么“复杂的未知正则表达式模式”,它根本不是一个有效的正则表达式。不清楚您想用它做什么或希望发生什么。谢谢大家。我的错,我用了正则表达式这个词。或者如果您只是在寻找子字符串,
索引
。非常感谢tinita:)