当我写:
myfunc(some => qr { \.(aa|bb|cc)$ }i );
正则表达式会匹配任何结尾的.aa
或.bb
或.cc
- 不区分大小写。
如何写,完全相反 - 例如。与其他任何东西相匹配什么不会结束.aa
或.bb
或.cc
- 再次不区分大小写?
在:
myfunc(some => qr { !/\.(aa|bb|cc)$/i } );
不起作用。
如何编写正确的qr
作为值传递给some
?
答案 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/