Perl" qr"什么不能匹配

时间:2015-04-10 10:42:36

标签: regex perl

当我写:

myfunc(some => qr { \.(aa|bb|cc)$ }i );

正则表达式会匹配任何结尾的.aa.bb.cc - 不区分大小写。

如何写,完全相反 - 例如。与其他任何东西相匹配什么不会结束.aa.bb.cc - 再次不区分大小写?

在:

myfunc(some => qr { !/\.(aa|bb|cc)$/i } );

不起作用。

如何编写正确的qr作为值传递给some

2 个答案:

答案 0 :(得分:2)

您需要negative look-behind assertion

qr/(?<!\.(?:aa|bb|cc))$/i

此正则表达式匹配不遵循".aa"等字符串的结尾。但它仅适用于固定宽度的后视。

或者如果它们的长度不一样:

qr/(?<!\.(?:aa|bb|cc))(?<!\.ddd)$/i

答案 1 :(得分:2)

my $re = qr{ \.(?:aa|bb|cc)$ }xi;  !/$re/

可以写成

my $re = qr{ ^ (?! .* \.(?:aa|bb|cc)$ ) }sxi;  /$re/