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路径等。