zoukankan      html  css  js  c++  java
  • 文件路径的正则表达式

    一、情景  

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

    二、解决方案

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

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

  • 相关阅读:
    省选前模拟
    $SA$后缀数组
    一键运行
    多项式$fft$,$ntt$,$fwt$初步
    插头$DP$初步
    网络流初步
    欧拉路相关
    模板—Hash_map
    HZOJ Function
    HZOJ Tree
  • 原文地址:https://www.cnblogs.com/Quincy/p/1880338.html
Copyright © 2011-2022 走看看