我想要匹配的路径有两种:一是类似于"C:\test\test"或"V:\asf\"这种windows的路径,别一种是类似于"\\ip\test"或"\\ip\test\"这类网络路径,我想有 一个 可以 同时识别 这两种路径 的正则表达式。
请高手赐教!如果不能合成一个正则表达式,分别用两种也可以。
我是在Powershell中用"string" -math "Regex"的方式来判断,如果在Powershell中测试通过就更好了!

解决方案 »

  1.   

    http://topic.csdn.net/t/20040906/14/3344656.html
      

  2.   

    $dir = '\\[^\\\\/:*?"<>|]+'
    $pattern = "^([a-zA-Z]:|\\$dir)($dir)*\\?$"
    "C:\test\test" -match $pattern
    "V:\asf\" -match $pattern
    "\\ip\test" -match $pattern
    "\\ip\test\" -match $pattern
      

  3.   

    完美了,膜拜之!
    方便解释一下“$dir = '\\[^\\\\/:*?"<>|]+'”这句的意思吗?我不太明白为什么会有四个:"\\\\",还有,我自己在写了一个类似这样的:“[^!@#$%]”匹配模式,但用"a@" -match “[^!@#$%]”总是返回true,只有"@" -match “[^!@#$%]”这样才会返回false,不明白你这里为什么可以用“[^\\\\/:*?"<>|]”来正确匹配。
      

  4.   

    是我写错了,应该是两个杠,表示不匹配单斜杠,第一个斜杠是转义,4个杠重复了。
    $dir 表示以斜杠开头,后面跟一串合法的路径名称(至少一个字符),用来匹配一个目录项。
    其实路径匹配挺复杂的,上面这个肯定也还有错,比如目录名中有空格应该是合法的,但全空格应该是错的,
    还有\\开头如果是ip,应该检查ip格式,现在这个表达式都没考虑。