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

时间:2010-04-26 05:03:13

标签: java regex

我一直试图弄清楚这个爆破正则表达式是怎么回事!!!现在是午夜,我得知道这个,然后去睡觉!

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

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

仅供参考,我想抓住的非法角色是 ? \ /&lt; &GT; | *:“ 我有反斜杠的工作异常

2 个答案:

答案 0 :(得分:8)

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

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

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

[abc\\]*
正则表达式中需要

\\来逃避反斜杠。

答案 1 :(得分:3)

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

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

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