文件路径的正则表达式

一、情景  

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

 

二、解决方案

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

^(?<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中也有正则表达式的文章

转载于:https://www.cnblogs.com/Quincy/archive/2010/11/18/1880338.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值