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); } } 

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

谢谢

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

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

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

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

使用这个正则表达式:

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

我添加了两个修改:你忘了添加. 用于匹配文件名abc.txt和反斜杠转义( \\ )也是必需的。

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

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

只是说,一个人应该取代.

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

\\.

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

由于路径包含文件夹,文件夹名称可以包含除以外的任何字符

? \ /:“* <>

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

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

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

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

正则表达式:

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

作为Java字符串

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

如果它必须只匹配运行应用程序的同一台机器上的文件路径,那么您可以使用:

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

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