1

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

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

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

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

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

不幸的是,空白通配符\s"Unrecognized escape \s passed through"。问题显然在于包含反斜杠的字符串文字(稍后需要作为正则表达式的一部分!)。

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

4

1 回答 1

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"
于 2013-08-29T09:15:00.073 回答