Perl regex:包含元字符作为匹配表达式变量的字符串文字

时间:2013-08-29 09:12:27

标签: regex perl

我需要将字符串文字定义为变量,稍后将其用作匹配表达式。

我希望我的变量 $ regex_op 匹配字符串 alt_id:ID:以及字符串 id:ID:

my $regex_op = "(id|alt_id):\sID:";
my $searchword = "4";

稍后,我将以正则表达式加入变量:

/^($regex_op)($searchword)/m

不幸的是,空白通配符 \ s “无法识别的转义符\ n”通过“。 问题显然在于包含反斜杠的字符串文字(稍后需要作为正则表达式的一部分!)。

任何想法如何解决这个问题?

1 个答案:

答案 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"