我需要将字符串文字定义为变量,稍后将其用作匹配表达式。
我希望我的变量 $ regex_op 匹配字符串 alt_id:ID:以及字符串 id:ID:。
my $regex_op = "(id|alt_id):\sID:";
my $searchword = "4";
稍后,我将以正则表达式加入变量:
/^($regex_op)($searchword)/m
不幸的是,空白通配符 \ s 是“无法识别的转义符\ n”通过“。 问题显然在于包含反斜杠的字符串文字(稍后需要作为正则表达式的一部分!)。
任何想法如何解决这个问题?
答案 0 :(得分:3)
对于正则表达式,请使用正则表达式引号qr//
。这样可以确保使用正则表达式的正确解析规则,而不是双引号字符串的解析规则:
my $regex_op = qr/(?:id|alt_id):\sID:/; # I think that group should be non-capturing
my $searchword = 4;
/^$regex_op($searchword)/m; # no need to group $regex_op; unless you want to capture
在双引号字符串中,如果反斜杠后跟一个不是已知转义符的字符,则该字符保持原样,但反斜杠被删除:
"\s" eq "s"