正则表达式与perl中的“(”匹配

时间:2018-11-19 05:24:32

标签: regex perl

我尝试了以下代码

my $line = "(int)";
my $pattern = qr(^\(int\));

if ( $line =~ /$pattern/ ) {
    print "line matched";
} else {
    print "line not matched";
}

不匹配。

请帮助您找到与此行匹配的模式

谢谢。

1 个答案:

答案 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更改了行为。

(几乎就像一个弃用周期,只是警告警告您可能没有想到过时的行为,而不是即将到来的新行为,这似乎是不幸的。)