0

可能重复:
在 Perl 的变量中用反斜杠替换文本

为什么这段代码不起作用?

my $foo = '\aa\bb';
my $bar = '\aa\bb\ee\ss.txt';

say $bar =~ m/^$foo.*$/ ? 'OK' : 'BAD';

使用正斜杠就可以了。

4

3 回答 3

6

在将您的正则表达式放在那里之前,您可能应该quotemeta先使用。

my $foo = quotemeta('\aa\bb');

放入正则表达式时的反斜杠具有特殊含义。quotemeta将逃避它们,以便从字面上匹配它们。

于 2013-01-31T15:33:22.690 回答
4

你必须引用特殊字符,

用这个:

say $bar =~ m/^\Q$foo\E.*$/ ? 'OK' : 'BAD';
             __^    __^

看看quotemeta

于 2013-01-31T15:32:37.350 回答
2

You are using

/^\aa\bb.*$/
  • \a matches the "alarm" character.
  • \b matches a word boundary.

You want to generate a pattern that matches a given string. For that, you can use quotemeta.

my $pat = quotemeta($foo);
/^$pat.*$/

quotemeta can also be called using \Q..\E.

/^\Q$pat\E.*$/
于 2013-01-31T15:48:36.420 回答