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

时间:2010-12-20 12:25:23

标签: java regex

我正在尝试创建一个正则表达式来匹配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);

}

}

然而它总是给我,结果是假的。请帮助我。

由于

9 个答案:

答案 0 :(得分:17)

Java也正在使用反斜杠转义,所以你需要两次转义反斜杠,一次是Java字符串,一次是regexp。

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

你的正则表达式匹配文字'[ - zA-Z0-9_-'字符串和文字'?'在末尾。我还在那里添加了一段时间来允许'abc.txt'..

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

答案 1 :(得分:4)

使用此正则表达式:

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

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

答案 2 :(得分:1)

它不匹配,因为你的正则表达式只匹配路径,而不匹配文件。 - 更正确:它不接受文件名中的

另外,还有鱼子提到的逃避问题。

答案 3 :(得分:1)

简单地说,应该替换

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

\\.

.适用于正则表达式(Java风格)中的任何字符,而
\.专门用于。字符,我们需要逃避反斜杠

答案 4 :(得分:1)

由于路径包含文件夹,文件夹名称可以包含

以外的任何字符
  

? \ /:“*<>

我们可以使用下面的正则表达式来匹配目录路径[它使用文件夹名称可以承受的所有符号]

[A-Za-z]:[A-Za-z0-9\!\@\#\$\%\^\&\(\)\'\;\{\}\[\]\=\+\-\_\~\`\.\\]+

答案 5 :(得分:0)

有两个原因导致你虚假。首先,您需要\\\\而不是\\,因为您需要转义这些字符。第二个是你错过了一个点字符,你可以在a-z之前插入([a-zA-Z]:)?(\\\\[.a-zA-Z0-9_-]+)+\\\\?

答案 6 :(得分:0)

这是Windows文件系统的正确正则表达式:

正则表达式:

(?:[a-zA-Z]\:)\\([\w-]+\\)*\w([\w-.])+  

作为Java字符串

"(?:[a-zA-Z]\\:)\\\\([\\w-]+\\\\)*\\w([\\w-.])+"

答案 7 :(得分:0)

如果必须仅匹配运行应用程序的同一台计算机上的文件路径,则可以使用:

try{
    java.nio.file.Paths.get(yourPath);
}(catch InvalidPathException err){
}

因此,如果您在Windows上运行应用程序,上面的代码将捕获无效的Windows路径,如果您在unix上运行,它将捕获无效的unix路径等。

答案 8 :(得分:0)

这里给出了一个很好的解释:https://www.codeproject.com/Tips/216238/Regular-Expression-to-Validate-File-Path-and-Exten

我正在总结相同的内容:

正则表达式:

^(?:[\w]\:|\\)(\\[a-z_\-\s0-9\.]+)+\.(txt|gif|pdf|doc|docx|xls|xlsx|apk)$

"^(?:[\\w]\\:|\\\\)(\\\\[a-z_\\-\\s0-9\\.]+)+\\.(txt|gif|pdf|doc|docx|xls|xlsx|apk)$"

它适用于以下任何路径:

\\192.168.0.1\folder\file.pdf
\\192.168.0.1\my folder\folder.2\file.gif
c:\my folder\abc abc.docx
c:\my-folder\another_folder\abc.v2.docx