繁体   English   中英

用于匹配具有非法文件名字符的字符串的正则表达式

[英]regex for matching strings that have illegal filename characters

我一直想弄清楚这个爆破正则表达怎么样两个小时! 现在是午夜,我得知道这个,然后去睡觉!

String str = new String("filename\\");
if(str.matches(".*[?/<>|*:\"{\\}].*")) {
    System.out.println("match");
}else {
    System.out.println("no match");
}

".*[?/<>|*:\\"{\\\\}].*"是我的正则表达式。除了反斜杠之外,它正确捕获所有内容!!!我需要知道如何正确捕获反斜杠请帮助!

仅供参考,我想抓到的非法角色是? \\ / <> | *:“我的反斜杠工作异常了

问题是\\\\转义了Java String中的反斜杠,你必须在正则表达式中转义它。 这意味着使用四个反斜杠:

if ("ab\\d".matches("[abd\\\\]*") {
  // match
}

因为两个反斜杠是Java String转义,所以正则表达式是:

[abc\\]*

正则表达式中需要和\\\\来逃避反斜杠。

我知道这是一个相当古老的问题,但我在处理同样的问题时发现它并且我认为未来的读者可能会觉得这很有用:

除了在文件名中捕获无效字符外,还有一些其他因素需要考虑。 文件名不能以空格开头或结尾,它们不能以a结尾. 字符,它们不能是空字符串。 对于匹配错误的文件名,这个正则表达式可能会更加彻底:

^(\s+.*|.*[\\/:\"?*|<>].*|.*\s+||.*\.)$

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM