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

afr*_*rey 5 java regex linux validation filepath

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

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

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

测试用例

有效/匹配:

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

无效/不匹配:

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

hc_*_*dev 6

您的正则表达式问题

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

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

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

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

^/|(/[a-zA-Z0-9_-]+)+$
Run Code Online (Sandbox Code Playgroud)

或等价物(参见RegexPlanet 上的演示)

^/|(/[\w-]+)+$
Run Code Online (Sandbox Code Playgroud)

解释: \w匹配一个单词字符(与 相同[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();
}
Run Code Online (Sandbox Code Playgroud)

使用的替代解决方案 File

请注意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();
}
Run Code Online (Sandbox Code Playgroud)

扩展解决方案

如评论中所述,根特殊形式//也应该有效。然后使用这个正则表达式:

^/|//|(/[\w-]+)+$
Run Code Online (Sandbox Code Playgroud)

它支持:

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

也可以看看