Java Regex az,AZ,0-9和(.)(_)( - )

Wil*_*nes 7 java regex

写一个简单的正则表达式,但我从来都不是很擅长这个.

我要做的是检查字符串(文件名)以确保它只包含az,AZ,0-9或特殊字符下划线(_)句点(.)或短划线( - ).

这就是我所拥有的

if(filename.length() < 1 || !filename.matches("^[a-zA-Z0-9[.][_][-]]+"))
   return false;
else
   return true;
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但对我来说看起来并不优雅.有没有更好/更可读的方式来写这个?

提前致谢!只是想学习如何更好地编写这些bugger.

-将

ovg*_*vin 10

您不需要使用[]内部字符类.

所以,你可以写:

^[-a-zA-Z0-9._]+
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用\\w而不是a-zA-Z0-9_.

所以,正则表达式将是:

^[-\\w.]+
Run Code Online (Sandbox Code Playgroud)

此外,此正则表达式将匹配像StackOverflow 22.10$$2011消费一样的字符串StackOverflow 22.10.如果你需要你的字符串完全由这些字符组成,你应该结束模式$- 字符串的结尾:

^[-\\w.]+$
Run Code Online (Sandbox Code Playgroud)