正则表达式匹配包含空格的有效绝对Windows目录

Inv*_*ion 5 regex

我想要一个正则表达式来匹配一个有效的绝对Windows目录路径,其中目录名称可以包含空格.

示例匹配:

C:\pictures\holiday  (without trailing backslash)
C:\pictures\holiday\ (or with trailing backslash)
C:\ pictures\holiday
C:\ pictures\holiday\
C:\pictures \ holiday
C:\pictures \ holiday\
C:\pictures\ holiday \
Run Code Online (Sandbox Code Playgroud)

示例失败:

\pictures\holiday (no relative path allowed)
C:\pictures*\holiday (not a valid directory path)
Run Code Online (Sandbox Code Playgroud)

我试过了,^[a-zA-Z]:(\\\w+)*([\\])?$但这与空格不符.

我也试过^[a-zA-Z]:(\s)*(\\\w+)*(\s)*([\\])?$但是工作不正常.

正则表达式是我的最后手段.我还尝试使用非正则表达式解决方案来验证文本框,就像在这个答案中一样.但我还没有找到适用于空间的方法.

提前致谢!

Bri*_*ens 9

这是一个正常的正则表达式:

^[a-zA-Z]:\\(((?![<>:"/\\|?*]).)+((?<![ .])\\)?)*$

它使路径符合NTFS标准(参见MSDN规范).我会把它分解:

^[a-zA-Z]:\\ 匹配单个驱动器号,冒号和反斜杠

(?![<>:"/\\|?*]) 是一个负面的先行,以确保下一个字符无效

((?![<>:"/\\|?*]).)+ 包装前瞻,后跟下一个字符,任意次

(?<![ .])\\是一个负面的lookbehind,以确保文件/目录不以空格或句点结束.请注意:Lookbehinds 还没有完全实现.

所有这一切都重复了0到多次,最后一个反斜杠是可选的.

对于许多用例,最好将路径长度限制为256个字符.为此,请替换*{0,256}.

编辑:允许根目录