【问题标题】:Java regular expression for file path文件路径的Java正则表达式
【发布时间】:2014-08-03 05:43:43
【问题描述】:

我正在开发一个用户需要提供本地文件位置或远程文件位置的应用程序。我必须对此文件位置进行一些验证。
以下是验证文件位置的要求。

路径不包含特殊字符*|"<>?
像“c:”这样的路径也是无效的。

类似路径

  • c:\,
  • c:\newfolder,
  • \\casdfhn\share

有效,而

  • c:
  • non,
  • \\casfdhn

不是。

我已经根据这个需求实现了代码:

String FILE_LOCATION_PATTERN = "^(?:[\\w]\\:(\\[a-z_\\-\\s0-9\\.]+)*)";
String REMOTE_LOCATION_PATTERN = "\\\\[a-z_\\-\\s0-9\\.]+(\\[a-z_\\-\\s0-9\\.]+)+";

Pattern locationPattern = Pattern.compile(FILE_LOCATION_PATTERN);
Matcher locationMatcher = locationPattern.matcher(iAddress);
if (locationMatcher.matches()) {
    return true;
}

locationPattern = Pattern.compile(REMOTE_LOCATION_PATTERN);
locationMatcher = locationPattern.matcher(iAddress);

return locationMatcher.matches();

测试:

worklocation'        pass
'C:\dsrasr'          didnt pass  (but should pass)
'C:\saefase\are'     didnt pass  (but should pass)
'\\asfd\sadfasf'     didnt pass  (but should pass)
'\\asfdas'           didnt pass  (but should not pass)
'\\'                 didnt pass  (but should not pass)
'C:'                 passed infact should not pass

我尝试了很多正则表达式,但没有满足要求。我正在为此要求寻求帮助。

【问题讨论】:

标签: java regex validation


【解决方案1】:

以下应该有效:

([A-Z|a-z]:\\[^*|"<>?\n]*)|(\\\\.*?\\.*)

以绿色和红色突出显示的行是通过的行。未突出显示的行失败。

请记住,上面的正则表达式不会为 java 转义

【讨论】:

  • 这是什么工具?
【解决方案2】:

从你的限制来看,这似乎很简单。

^(C:)?(\\[^\\"|^&lt;&gt;?\\s]*)+$

以 C:\ 或斜杠 ^(C:)?\\ 开头

除了那些特殊字符之外,其余的都可以是([^\\"|^&lt;&gt;?\\s\\\])*

并匹配整个路径$

编辑:似乎 C:/ 和 / 只是示例。允许任何东西/任何东西使用这个:

^([^\\"|^&lt;&gt;?\\s])*(\\[^\\"|^&lt;&gt;?\\s\\\]*)+$

【讨论】:

  • 没有必要有C:它可以是任何东西
  • 我也试过这个我收到错误:java.util.regex.PatternSyntaxException: Unmatched closing ')' near index 27 ^([^"|^?\s])*([ ^"|^?\s])*$ ^
  • 我也在互联网上试过我的,它可以工作,但在 java 中没有使用模式类和匹配器
  • 在java中你们确定双重转义吗? java中的“\”需要是“\\”。编辑了使用双转义的答案
  • 是的,我做了更改.."^([^\\\"|^?\\s])*\\\([^\\\"|^? \\s])*$".. 它工作正常.. 谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
相关资源
最近更新 更多