有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用java正则表达式验证windows和linux路径及扩展

我正在尝试编写一个函数,该函数将验证给定路径在具有文件扩展名的Linux/Windows中是否有效

例:

Windows路径:D:\DATA\My_Project\01_07_03_061418738709443。文档
Linux路径:/source_data/files/08_05_09_1418738709443。pdf

我试过的代码是

static String REMOTE_LOCATION_WIN_PATTERN = "([a-zA-Z]:)?(\\\\[a-z  A-Z0-9_.-]+)+.(txt|gif|jpg|png|jpeg|pdf|doc|docx|xls|xlsx|DMS)\\\\?";

static String REMOTE_LOCATION_LINUX_PATTERN = "^(/[^/]*)+.(txt|gif|jpg|png|jpeg|pdf|doc|docx|xls|xlsx|DMS)/?$";

public boolean checkPathValidity(String filePath) {

   Pattern linux_pattern = Pattern.compile(REMOTE_LOCATION_LINUX_PATTERN);
   Pattern win_pattern = Pattern.compile(REMOTE_LOCATION_WIN_PATTERN);
   Matcher m1 = linux_pattern.matcher(filePath);
   Matcher m2 = win_pattern.matcher(filePath);

   if (m1.matches() || m2.matches()) {
      return true;
   } else {
      return false;
   }
}

如果路径在windows/linux中有效,此函数将给出结果true。 对于某些包含日期的路径,?,*在他们的道路上


共 (2) 个答案

  1. # 1 楼答案

    static String REMOTE_LOCATION_WIN_PATTERN = "([a-zA-Z]:)?(\\\\[a-z  A-Z0-9_.-]+)+.(txt|gif|jpg|png|jpeg|pdf|doc|docx|xls|xlsx|DMS)\\\\?";
    
    static String REMOTE_LOCATION_LINUX_PATTERN = "^(/[^/]*)+.(txt|gif|jpg|png|jpeg|pdf|doc|docx|xls|xlsx|DMS)/?$";
    
    static Pattern linux_pattern = Pattern.compile(REMOTE_LOCATION_LINUX_PATTERN);
    static Pattern win_pattern = Pattern.compile(REMOTE_LOCATION_WIN_PATTERN);
    
    static final boolean WINDOWS = System.getProperty("os.name").startsWith("Windows");
    
    
    public boolean checkPathValidity(String filePath) {
       Matcher m = WINDOWS ? win_pattern.matcher(filePath) : linux_pattern.matcher(filePath);
    
       return m.matches();    
    }
    
  2. # 2 楼答案

    您基本上可以将这两种模式结合起来,如下所示:

    1. windows:[a-zA-Z]:\\(?:([^<>:"\/\\|?*]*[^<>:"\/\\|?*.]\\|..\\)*([^<>:"\/\\|?*]*[^<>:"\/\\|?*.]\\?|..\\))?
    2. linux:\/.*
    3. 总计:(\/.*|[a-zA-Z]:\\(?:([^<>:"\/\\|?*]*[^<>:"\/\\|?*.]\\|..\\)*([^<>:"\/\\|?*]*[^<>:"\/\\|?*.]\\?|..\\))?)

    这对我的角度输入标记模式验证很有效

    有关详细信息How would I match a pattern for both windows and Linux directory path?请检查ling