文件路径的正则表达式

一、情景  

  最近需要验证一个给定的文件路径是否合法。首先这里指的是路径名称合法,但不是说路径存在或者可以创建,因为这个路径是其他机器上的文件路径,不能通过是否存在或者创建是否成功来判断是否合法。

 

二、解决方案

因而决定使用正则表达式试试,表达式如下:

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

下面解析下这个表达式

^                                               #匹配字符串的开始
(?<path>                                        #文件路径分组,指定分组名为path
  (?:[a-zA-Z]:)?\\                              #匹配盘符,如"C:\"、"e:\"、"\"
    (?:[^\\\?\/\*\|<>:"]+\\)+                   #匹配文件夹名称部分,如"folder1\"、"folder1\folder2\"
)                                               #文件路径分组结束
(?<filename>                                    #文件名分组,指定分组名为filename
  (?<name>                                      #文件名分组,指定分组名为name
    [^\\\?\/\*\|<>:"]+?)                         #匹配文件名称,不包含字符'\'、'?'、'/'、'|'、'<'、'>'、':'、'"'
      \.                                        #匹配字符'.'
        (?<ext>[^.\\\?\/\*\|<>:"]+)             #匹配文件后缀名
)
$                                               #匹配字符串的结束

 

三、测试方法

使用RegexTester测试一下

输入c:\windows\system32\mfc.dll

clip_image001

 

输入非法的路径,匹配失败

c:\windows\sys<\mfc.dll

image 

 

当然该正则表达式还有问题。

如果输入路径c:\windows\\system32\mfc.dll,路径匹配也会失败,所以在用表达式检测前需要把路径中的'\\'替换成'\'

不能匹配网络路径,如\\server\sharefolder\file1.txt

 

四、相关引用

一些比较好的文章

看了一下正则表达式,这个教程不错《正则表达式30分钟入门教程

regexlab上的文章《揭开正则表达式的神秘面纱

MSDN中也有正则表达式的文章

posted @ 2010-11-18 00:14  Quincy  阅读(39343)  评论(1编辑  收藏  举报