在perl中匹配包含特殊字符的字符串和正则表达式

时间:2017-08-06 11:14:43

标签: regex perl

我的文件中有一行包含以下字符串

$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字符串。为什么呢?

1 个答案:

答案 0 :(得分:0)

您的第一个字符串是双引号,因此会处理反斜杠转义序列。

\cs代表Ctrl-S,也可以写成chr(19)"\x13"

您的第二个字符串是单引号,它会忽略反斜杠转义(\\\'除外)。

因此,您的正则表达式最终会查找3个字符的序列\ c s,但您的目标字符串包含单个字节0x13

要解决此问题,请在第一个字符串中写入"... \\cs ..."(第一个反斜杠转义为第二个反斜杠),或者对第一个字符串使用单引号('... \cs ...')。