我要做的是一个字符串是合法的文件,还是文件夹
例如:E:\2.7 Integrated+Test+Scenario(new test senario)-cn.xls是一个合法的文件我写的正则表达式:String strPatternWin = "(\\w:\\\\(([\\w][\\w|\\.|\\s]*[\\w])+\\\\)*([^\\\\]+))";后来改成:String strPatternWin = "(\\w:\\\\(([\\S][\\S|\\.|\\s]*[\\S])+\\\\)*([^\\\\]+))";但是不管如何,碰到上面那个文件就死掉错在哪里啊?

解决方案 »

  1.   


    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class ReplyBBs { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    ReplyBBs.method1();
    }

    public static void method1(){
    Pattern p = Pattern.compile("[CDEFGHIJK]:(\\\\\\w+)*");
    String s = "I'm singing while you're dancing D:\\csharpe";
    Matcher m = p.matcher(s);
    while (m.find()) {
    p(m.group());
    p(m.start() + "---" + m.end());
    }
    }

    public static void p(Object o) {
    System.out.println(o);
    }}自己写的 你看看 好不好使
      

  2.   

    import java.util.regex.Pattern;public class RegexTest { public static void main(String[] args) {
    String input = "E:\\2.7 Integrated+Test+Scenario(new test senario)-cn.xls";
    // ^[A-Z]:\\(?:[^\\/:*?"<>|]+\\)*[^\\/:*?"<>|]*$
    Pattern p = Pattern.compile("^[A-Z]:\\\\(?:[^\\\\/:*?\"<>|]+\\\\)*[^\\\\/:*?\"<>|]*$", Pattern.CASE_INSENSITIVE);
    boolean result = p.matcher(input).matches();
    System.out.println(result);
    }}
      

  3.   

    (^[^\.])[^\\/:*?"<>|]+$
    只是匹配文件名
      

  4.   

    sagezk
    是根据windows命名规则来的吧。C:\test \yinglish.txt
    应该不匹配(注意空格)你的也匹配了
      

  5.   

    ^[A-Z]:\\\\(?:[^\\\\/:*?\"<>|]+[^\\s]\\\\)*[^\\\\/:*?\"<>|]*[^\\s]$
    在sagezk的基础上改的。
    看看还有错没
      

  6.   


    可以,看看 Eclipse 的那几个配置文件。
      

  7.   

    再改下:这回文件或文件夹名以空格开头结尾都不算正确的了。
    import java.util.regex.Pattern;public class RegexTest { public static void main(String[] args) {
    String input = "E:\\2.7 Integrated+Test+Scenario(new test senario)-cn.xls";
    // ^[A-Z]:(?:\\(?!\s)[^\\/:*?"<>|]+(?<!\s))*\\?$
    Pattern p = Pattern.compile("^[A-Z]:(?:\\\\(?!\\s)[^\\\\/:*?\"<>|]+(?<!\\s))*\\\\?$", Pattern.CASE_INSENSITIVE);
    boolean result = p.matcher(input).matches();
    System.out.println(result);
    }}