regex中的False[]范围

regex中的False[]范围,regex,perl,Regex,Perl,我用正则表达式检查文件名。现在Intellij的控制台向我显示以下消息: 在正则表达式中为False[]范围“\w-”;字符集中的破折号(介于[和]之间)通常用于定义范围。您应该将破折号移动到集合定义的末尾,或者最好是转义该破折号: [\w\-_.] (请注意,并不是所有的正则表达式引擎都只因为位于末尾而接受不带换行符的破折号,所以我一般不推荐它) -在([…])中是特殊的。它可以用于指定 但是,您指定的范围([\w-\u])没有任何意义。您可能想逐字匹配。,这可以通过转义-来完成 [\w\-

我用正则表达式检查文件名。现在Intellij的控制台向我显示以下消息:

在正则表达式中为False[]范围“\w-”;字符集中的破折号(介于
[
]
之间)通常用于定义范围。您应该将破折号移动到集合定义的末尾,或者最好是转义该破折号:

[\w\-_.]

(请注意,并不是所有的正则表达式引擎都只因为位于末尾而接受不带换行符的破折号,所以我一般不推荐它)

-
在(
[…]
)中是特殊的。它可以用于指定

但是,您指定的范围(
[\w-\u]
)没有任何意义。您可能想逐字匹配
,这可以通过转义
-
来完成

[\w\-_.]
-
放在字符类的开头或结尾也可以

[\w_.-]

只需在最后一个n字符类中添加
-
,即将此
[\w-\uU.]
更改为
[\w-\uU.]
this@CodeManiac这两者之间的区别是什么?
-
在字符类代表范围这并不是所有情况下都是正确的,
-
将被视为范围@CodeManiac。我没有收到您的评论。你确定你读对了我的答案吗?这仅仅是关于公式吗?@DenysSéguret我的意思是
-
中间的字符总是不表示范围,只要阅读我发布的问题链接就可以了comment@CodeManiac如果你读了我的答案,你会发现我很清楚这一点。不要在不了解引擎的情况下使用这个技巧:这取决于引擎和版本。这个问题与JS无关;这是关于Perl的。有许多正则表达式语言,就像有许多编程语言一样。
[\w\-_.]
[\w_.-]