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

标签 java regex linux validation filepath

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

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

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

测试用例

有效/匹配:

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

无效/不匹配:

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

最佳答案

你的 RegEx 问题

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

您可以通过删除反斜杠 \\ 和外括号来甚至减少它。 Begin ^ 和 end $ 只需要一次(围绕两个备选方案)。

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

您可以测试 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();
}

使用文件的替代解决方案

注意 docs on isDirectory() :

Returns: true if and only if the file denoted by this abstract pathname exists and is a directory; false otherwise

因此,如果在 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 // 也应该有效。然后使用这个正则表达式:

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

它支持:

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

另见

关于java - 用于验证 Linux 文件夹路径的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55069650/

相关文章:

Python 后视正则表达式问题 : Invalid regular expression: look-behind requires fixed-width pattern

php - Azure 应用服务 - 托管免费 PHP 网站

PHP 不保存到文件

java - WSDL 错误 : Document could not be read at line 0

java - 使用适用于 Java 的 AWS 开发工具包版本 2 将 InputStream 异步(非阻塞)上传到 AWS s3

java - 同步线程以按顺序执行操作

linux - docker 进程挂起对 stdout 的写入系统调用

java - 如何重构方法?

java - 如何匹配 ColdFusion 或 Java 正则表达式中的拉丁 unicode 字符?

regex - 如何找到名称可能比预期名称长的文件?