代码之家  ›  专栏  ›  技术社区  ›  cchampion

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

  •  3
  • cchampion  · 技术社区  · 14 年前

    我一直想弄清楚这两个小时里是怎么搞砸正则表达式的!!!现在是午夜,我得想个明白,然后上床睡觉!!!

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

    ".*[?/<>|*:\"{\\}].*"

    仅供参考,我想抓到的非法角色是 我把它当作反斜杠的例外

    2 回复  |  直到 14 年前
        1
  •  8
  •   cletus    14 年前

    问题是 \\ 反斜杠:

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

    因为其中两个反斜杠是Java字符串转义,所以regex实际上是:

    [abc\\]*
    

    \\

        2
  •  3
  •   rifflock    10 年前

    我知道这是一个相当老的问题,但我在研究同一个问题时发现了它,我想未来的读者可能会发现这个问题很有用:

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

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