当正则表达式中的pattern部分使用变量时,应当注意转义符的解释问题。
my $a = "MGI:87854|Ensembl:ENSMUSG00000030359";
my $pattern = "MGI:\d+";
if($a =~ /$pattern/){
print "$&\n";
}
这样写本来的意图是匹配MGI:87854,但是却达不到效果,是因为逃逸符本身没有被逃逸而被perl解释器解释掉了,所以应当这样写pattern:
my $pattern = "MGI:\\d+";
注意,若将双引号换成但引号,则pattern仍可写成MGI:\d+形式,这也说明perl对引号的解释机制类似于bash,双引号的解释强度强于单引号,单引号中\不被解释称转义字符。
另外,若想匹配在正则表达式系统中有特殊含义的字符:\,|,^,$,则需要在pattern中提前加一个转义\。