我的文件中有一行包含以下字符串
$print = "SM_sdo_debugss_cxct6_CSCTM_4 \csctm_gen[4]_ctm_i_nctm_I_csctm (4+5)";
$my_meta = '\csctm_gen[4]_ctm_i_nctm_I_csctm';
print "I got this\n" if($print =~ /\Q$my_meta\E/);
但它无法在$my_meta
中找到$print
字符串。为什么呢?
答案 0 :(得分:0)
您的第一个字符串是双引号,因此会处理反斜杠转义序列。
\cs
代表Ctrl-S,也可以写成chr(19)
或"\x13"
。
您的第二个字符串是单引号,它会忽略反斜杠转义(\\
和\'
除外)。
因此,您的正则表达式最终会查找3个字符的序列\
c
s
,但您的目标字符串包含单个字节0x13
。
要解决此问题,请在第一个字符串中写入"... \\cs ..."
(第一个反斜杠转义为第二个反斜杠),或者对第一个字符串使用单引号('... \cs ...'
)。