我正在尝试创建一个正则表达式来匹配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);
}
}
然而它总是给我,结果是假的。请帮助我。
由于
答案 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