我尝试了以下代码
my $line = "(int)";
my $pattern = qr(^\(int\));
if ( $line =~ /$pattern/ ) {
print "line matched";
} else {
print "line not matched";
}
不匹配。
请帮助您找到与此行匹配的模式
谢谢。
答案 0 :(得分:6)
我相信早期版本的perl可能存在这样的错误,如果您使用\
来转义也是正则表达式分隔符的正则表达式元字符,它将被视为元字符,而不是文字字符。尝试为您的正则表达式使用其他定界符,例如qr/^\(int\)/
。
$ for v in 10 12 14 16 18 20 22 24 26 ; do
echo "5.$v"
"5.${v}t"/bin/perl -le'print qr(^\(int\))'
echo
done
5.10
(?-xism:^(int))
5.12
(?-xism:^(int))
5.14
(?^:^(int))
5.16
(?^:^(int))
5.18
Useless use of '\'; doesn't escape metacharacter '(' at -e line 1.
(?^:^(int))
5.20
Useless use of '\'; doesn't escape metacharacter '(' at -e line 1.
(?^:^(int))
5.22
(?^:^\(int\))
5.24
(?^:^\(int\))
5.26
(?^:^\(int\))
因此5.18在使用转义的定界符时添加了警告(即使警告已关闭),而5.22更改了行为。
(几乎就像一个弃用周期,只是警告警告您可能没有想到过时的行为,而不是即将到来的新行为,这似乎是不幸的。)