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

匹配文件路径的java正则表达式,java,regex,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-z

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

}

}
然而,它总是给我错误的结果。请帮帮我


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


此外,还有roe提到的转义问题。

Java也在使用反斜杠转义,你知道,所以你需要转义反斜杠两次,一次用于Java字符串,一次用于regexp

"([a-zA-Z]:)?(\\\\[a-zA-Z0-9_.-]+)+\\\\?"
您的regexp匹配了一个文本'[-zA-Z0-9_-'字符串,并在末尾匹配了一个文本'?'。我还在其中添加了一个句点以允许'abc.txt'

这样说,考虑使用另一种机制来确定有效的文件名,因为有不同的方案(即UNIX)。如果路径无效,JavaUTL.file可能会抛出一个异常,这可能是一个不错的选择,虽然我不喜欢使用控制流的异常…< /P> < P>使用这个正则表达式:

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

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

有两个原因导致它为false。第一个原因是你需要
\\\\\\\\\
而不是
\\\\
,因为你需要转义这些字符。第二个原因是你缺少一个点字符,你可以在
a-z
之前插入它作为
([a-zA-z]:)?(\\\\\\\\[.a-zA-Z0-9-])+\\\\?

只是说,我们应该替换中的

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

用于正则表达式(Java样式)中的任何字符,而

\.
专门用于.character,我们需要转义反斜杠

这里是适用于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路径,等等。

因为路径包含文件夹,文件夹名称可以包含除

?\/:“*<>

我们可以使用下面的正则表达式来匹配目录路径[它使用一个文件夹名能够提供的所有符号]

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

这里给出了一个很好的解释:

我在总结同样的情况:

正则表达式:

^(?:[\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

遗憾的是,
java.util.File
将接受其构造函数中的乱码路径,而不会抛出异常。任何需要QQQQUUUAAAADDDRRRUUUPPPLLEEEDDD Slackbash的语言或系统都是事实上的大脑受损,无法挽回。我会在遭受这种愤怒之前找到一份新工作。这比去邮局要好l、 您可能需要空格字符:([a-zA-Z]:)?(\\\\[\\w\.\-]+)+\\\\?@ToKra,您的要点是?它是一个有效路径,因此应该匹配。@TheLima您表面上是正确的,但您认为test.txt是一个文件的假设是错误的。没有任何东西阻止您创建一个名为“test.txt”的目录和该目录中名为“hhh”的文件“
在字符组中并不表示“任何字符”,字符组中唯一的特殊字符是
]
(组尾),
-
(范围,仅当在两个字符之间特别使用时,而不是在开头或结尾或两个范围之间,
a-b-c
匹配
a
b
c
-
),和
^
(否定匹配,仅当用作第一个字符时才特别)但不适用于c:my folder\abc.docx。也许它应该忽略大小写和前导空格