我一直试图弄清楚这个爆破正则表达式是怎么回事!!!现在是午夜,我得知道这个,然后去睡觉!
String str = new String("filename\\");
if(str.matches(".*[?/<>|*:\"{\\}].*")) {
System.out.println("match");
}else {
System.out.println("no match");
}
".*[?/<>|*:\"{\\}].*"
是我的正则表达式。除了反斜杠之外,它能正确捕获所有内容!我需要知道如何让它正确地抓住反斜杠请帮忙!
仅供参考,我想抓住的非法角色是 ? \ /&lt; &GT; | *:“ 我有反斜杠的工作异常
答案 0 :(得分:8)
问题是\\
转义了Java String中的反斜杠,你必须在正则表达式中转义它。这意味着使用四个反斜杠:
if ("ab\\d".matches("[abd\\\\]*") {
// match
}
因为两个反斜杠是Java String转义,所以正则表达式是:
[abc\\]*
正则表达式中需要和\\
来逃避反斜杠。
答案 1 :(得分:3)
我知道这是一个相当陈旧的问题,但我在处理同样的问题时发现了这一点,并且我认为未来的读者可能会觉得这很有用:
除了捕获文件名中的无效字符外,还有一些其他因素需要考虑。文件名不能以空格开头或结尾,它们不能以.
字符结尾,也不能是空字符串。对于匹配错误的文件名,这个正则表达式可能会更彻底:
^(\s+.*|.*[\\/:\"?*|<>].*|.*\s+||.*\.)$