用于验证Linux文件夹路径的正则表达式模式

问题描述 投票:0回答:3

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

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

文件夹路径应仅包含以下字符:字母,数字,短划线或下划线。

Test cases

有效/匹配:

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

无效/不匹配:

  • null或空字符串
  • /abc/
  • /abc/abc/abc/abc/
java regex linux validation filepath
3个回答
1
投票

您的RegEx问题

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

您甚至可以通过删除反斜杠\\和外部括号来减少它。开始^和结束$只需要一次(围绕两个选择)。

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

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

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

或等效的(参见RegexPlanet上的演示)

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

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

Implementation in Java code:

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. 任何非根目录,其名称由alphas,数字,破折号或下划线组成(例如/abc/123/_abc-123

也可以看看


0
投票

要涵盖包括根目录在内的所有情况,您需要具备以下条件:

^\/$|(\/[a-zA-Z_0-9-]+)+$

请参阅使用全局和多线修改器的Regex Demo


0
投票

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

编辑

第一个字符匹配正斜杠/。以下字符组匹配a-z,A-Z,0-9,下划线,正斜杠和短划线(所有接受的目录和文件名字符)。以下星号使模式匹配该字符组0次或更多次(因此这些字符的任何组合)。最后一个字符组有一个否定^意味着它匹配任何东西除了字符组中的内容,是我们不想匹配的最后正斜杠。最后$结束了字符串。

© www.soinside.com 2019 - 2024. All rights reserved.