我想要一个正则表达式来匹配一个有效的绝对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)*([\\])?$但是工作不正常.
正则表达式是我的最后手段.我还尝试使用非正则表达式解决方案来验证文本框,就像在这个答案中一样.但我还没有找到适用于空间的方法.
提前致谢!
这是一个正常的正则表达式:
^[a-zA-Z]:\\(((?![<>:"/\\|?*]).)+((?<![ .])\\)?)*$
它使路径符合NTFS标准(参见MSDN规范).我会把它分解:
^[a-zA-Z]:\\ 匹配单个驱动器号,冒号和反斜杠
(?![<>:"/\\|?*]) 是一个负面的先行,以确保下一个字符无效
((?![<>:"/\\|?*]).)+ 包装前瞻,后跟下一个字符,任意次
(?<![ .])\\是一个负面的lookbehind,以确保文件/目录不以空格或句点结束.请注意:Lookbehinds 还没有完全实现.
所有这一切都重复了0到多次,最后一个反斜杠是可选的.
对于许多用例,最好将路径长度限制为256个字符.为此,请替换*为{0,256}.
编辑:允许根目录
| 归档时间: |
|
| 查看次数: |
14622 次 |
| 最近记录: |