java正则表达式匹配文件路径

新手上路,请多包涵

我正在尝试创建一个正则表达式来匹配 java 中的文件路径

C:\abc\def\ghi\abc.txt

我试过这个 ([a-zA-Z]:)?(\\[a-zA-Z0-9_-]+)+\\? ,就像下面的代码

import java.util.regex.Pattern;

  public class RETester {

public static void main(String arhs[]){

    String regularExpression = "([a-zA-Z]:)?(\\[a-zA-Z0-9_-]+)+\\?";

    String path = "D:\\directoryname\\testing\\abc.txt";

    Pattern pattern = Pattern.compile(regularExpression);

    boolean isMatched = Pattern.matches(regularExpression,path);
    System.out.println(path);
    System.out.println(pattern.pattern());
    System.out.println(isMatched);

}

}

但是它总是给我,结果是假的。

原文由 Jijoy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

Java 也在使用反斜杠转义,您知道,因此您需要对反斜杠进行两次转义,一次用于 Java 字符串,一次用于正则表达式。

 "([a-zA-Z]:)?(\\\\[a-zA-Z0-9_.-]+)+\\\\?"

您的正则表达式匹配一个文字 ‘[-zA-Z0-9_-’ 字符串和一个文字 ‘?‘在最后。我还在其中添加了一个句点以允许“abc.txt”..

也就是说,考虑使用另一种机制来确定有效的文件名,因为存在不同的方案(即 unix)。如果路径无效,java.util.File 可能会抛出异常,这可能是一个不错的选择,尽管我不喜欢使用异常来控制流…

原文由 falstro 发布,翻译遵循 CC BY-SA 2.5 许可协议

使用此正则表达式:

 "([a-zA-Z]:)?(\\\\[a-zA-Z0-9._-]+)+\\\\?";

我添加了两个修改:您忘记添加 . 以匹配文件名 abc.txt 并且还需要反斜杠转义( \\ )。

原文由 darioo 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题