使用JAVA。 我正在尝试找到一种更优雅的方式来验证Linux文件夹路径(不包括文件名)。
到目前为止,我的情况是:"^\\/$|^((\\/([a-zA-Z0-9_-]+))+)$"
文件夹路径应仅包含以下字符:字母,数字,破折号或下划线。
有效/匹配:
/
/abc
/abc/abc/abc/abc
无效/不匹配:
/abc/
/abc/abc/abc/abc/
答案 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_]
相同,不匹配破折号)。
public boolean isValidLinuxDirectory(String path) {
Pattern linuxDirectoryPattern = Pattern.compile("^/|(/[a-zA-Z0-9_-]+)+$");
return path != null && !path.trim().isEmpty() && linuxDirectoryPattern.matcher( path ).matches();
}
File
的替代解决方案返回:
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-]+)+$
它支持:
/
//
的特殊形式/abc/123/_abc-123
)答案 2 :(得分:0)