正则表达式模式以验证Linux文件夹路径

时间:2019-03-08 19:19:30

标签: java regex linux validation filepath

使用JAVA。 我正在尝试找到一种更优雅的方式来验证Linux文件夹路径(不包括文件名)。

到目前为止,我的情况是:"^\\/$|^((\\/([a-zA-Z0-9_-]+))+)$"

文件夹路径应仅包含以下字符:字母数字破折号下划线

测试用例

有效/匹配:

  • /
  • /abc
  • /abc/abc/abc/abc

无效/不匹配:

  • 空字符串
  • /abc/
  • /abc/abc/abc/abc/

3 个答案:

答案 0 :(得分:0)

在这里: \/[a-zA-Z0-9_\/-]*[^\/]$

编辑

第一个字符与斜杠/相匹配。以下字符组匹配a-z,A-Z,0-9,下划线,正斜杠和破折号(所有可接受的目录和文件名字符)。以下星号使模式与该字符组匹配0次或更多次(因此,这些字符的任意组合)。最后一个字符组具有一个负数^,表示它与字符组中的字符(除了我们不想匹配的最后一个正斜杠)相匹配。最后用$结束字符串。

答案 1 :(得分:0)

正则表达式问题

您提供的RegEx正在测试用例上。

您可以甚至减少,只需删除反斜杠\\和一对外部括号即可。仅需要一次^和结束$(围绕这两种选择)。

使用正则表达式的可能解决方案

您可以测试RegEx on RegexPlanet.com (单击Java按钮进行测试)

^/|(/[a-zA-Z0-9_-]+)+$

或同等功能(请参见RegexPlanet上的演示)

^/|(/[\w-]+)+$

说明: \w匹配word-character(与[a-zA-Z0-9_]相同,不匹配破折号)。

Java代码的实现:

public boolean isValidLinuxDirectory(String path) {
    Pattern linuxDirectoryPattern = Pattern.compile("^/|(/[a-zA-Z0-9_-]+)+$");
     return path != null && !path.trim().isEmpty() && linuxDirectoryPattern.matcher( path ).matches();
}

使用File的替代解决方案

请注意docs on isDirectory()

  

返回:       true当且仅当以此抽象路径名表示的文件存在并且为目录时; false否则

因此,只有在Linux计算机上运行并且该文件夹/目录存在时,它才可以验证您的要求(有效的Linux文件夹)。

public boolean isValidExistingDirectory(String path) {
     if (path == null || path.trim().isEmpty()) return false;
     File file = new File( path );
     return file.isDirectory();
}

扩展解决方案

如评论中所述,special form of root //也应有效。然后使用此RegEx:

^/|//|(/[\w-]+)+$

它支持:

  1. 根目录/
  2. 根目录//的特殊形式
  3. 名称由字母,数字,破折号或下划线组成的任何非根目录(例如/abc/123/_abc-123

另请参见

答案 2 :(得分:0)

要涵盖所有情况,包括根目录,您将需要以下内容:

len(ms[ms==y_en])

使用全局和多行修饰符查看Regex Demo