0 perl
当我在perl中读取输入文件时,我得到了以下内容
u_pwrup_control/g_pwrup_bscan_cell[262]_u_pwrup_bscan
Run Code Online (Sandbox Code Playgroud)
现在我想使用regexp在参考文件中找到类似的行.但是当我使用下面的命令时,它不匹配.
while(<INPUT_FILE>){
$k=$_;
##opening ref file in read mode
while(<REF_FILE>)
if ($_ =~ /$k/) {
print $_;
} else {
print $k is not matching;
}
}
}
Run Code Online (Sandbox Code Playgroud)
请告诉我如何匹配[]而不用逃避.
您正在寻找这个功能quotemeta.或者,你可以\Q...\E在正则表达式中使用(有关它的更多信息perlre.
应用于你的代码:
$k = quotemeta $_;($_虽然是可选的),而不是$k = $_;$k = $_;和在正则表达式,做$_ =~ /\Q$k/.你没有在你的问题中提供很多细节,所以我不能保证这实际上与你想要匹配的东西相匹配,但至少[和](和任何其他不安全的角色)将在正则表达式中被转义.
特别是,您可能希望在阅读chomp这两while行之后,但这实际上取决于您正在阅读的内容.
但是您的代码可以通过多种方式得到改进,包括:
use strict;并use warnings;在脚本的开头.my $k = ...而不是只$k = ...(只有当你声明它).while像你那样做第一个:while (<INPUT_FILE>){ $k = $_; ... }while (my $k = <INPUT_FILE>) { ... }$_很方便,但在那个,它实际上不是.open my $INPUT_FILE, '<', 'your_file_name' or die $!while (<$INPUT_FILE>) { ... }