匹配文件路径的java正则表达式
我尝试创建一个正则表达式来匹配java中的文件路径 C:\abc\def\ghi\abc.txt 我试过这个匹配文件路径的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
([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。也许它应该忽略大小写和前导空格