我正在使用正则表达式检查文件名。现在,Intellij的控制台向我显示此消息:
在正则表达式中为假[]范围“ \ w-”;在 <-HERE m / ^ deploy-file- \ d + _ [\ w <-HERE _。] + \ d + .log $ / at ...
代码
elsif ($filename =~ m/^deploy-file-\d+_[\w-_.]+\d+\.log$/) {
print "$filename match with pattern\n";
}
我想说的是,一切都正常,并且该模式到目前为止工作正常。 我的问题是,为什么intellij向我显示此消息?问题是什么? 对程序有影响吗?
我的模式也适用于https://regex101.com/r/Lj2r4r/2
答案 0 :(得分:5)
-
在bracketed character classes([...]
)中是特殊的。可以用来指定ranges of characters。
[a-z]
但是,您指定的范围([\w-_]
)没有任何意义。您大概是要从字面上匹配_
,这可以通过转义-
来实现。
[\w\-_.]
将-
放在字符类的开头或结尾也可以。
[\w_.-]
答案 1 :(得分:3)
字符集中的破折号(在[
和]
之间)通常用于定义范围。您应该将破折号移到设置定义的末尾,或者最好将破折号转义:
[\w\-_.]
(请注意,并非所有的正则表达式引擎都接受不转义的破折号,只是因为它在末尾,因此一般不建议这样做)。