Java正则匹配Windows文件目录(详解)

深夜博客(>v0)

最近实验课要用Java写Socket编程,做一个文件服务器类似FTP那样的,使用命令行来ls、cd、get文件,途中遇到一个问题,就是如何用正则匹配Windows文件目录,比如D:\CSDN\我的博客这样的字符串,在网上翻了好长时间想找找有没有现成的,结果都是不是很全面的表达式,算了还是自己写正则表达式吧,于是自己写了一个感觉是很全面的一个表达式了,供大家参考,有问题可以评论区评论,我在做修改


此正则表达式只适用于Java中使用,且只适用于匹配Windows的绝对文件路径,若想复用,可以看看思路,删掉一些鸡肋的地方

我这里用的是String的matches方法来做的正则匹配,String的这个方法很鸡肋,只能判断字符串是否符合正则表达式,而且有一些很无语的bug

先给出我的代码段,在做讲解:

String text = "D:\\CSDN\\我的博客";
String fileRegex = "^[A-z]:\\\\([^|><?*\":\\/]*\\\\)*([^|><?*\":\\/]*)?$";
System.out.println(text.matches(fileRegex));

这里的正则表达式就是这个^[A-z]:\\\\([^|><?*\":\\/]*\\\\)*([^|><?*\":\\/]*)?$,看着是有些复杂,其实很简单

首先,D:\\CSDN\\我的博客之所以是\\,是因为这里要转义,否则你的eclipse会语法报错;
然后我们来看这个表达式,我们把它分为三部分看会比较清晰:
1 ^[A-z]:\\\\ 、 2 ([^|><?*\":\\/]*\\\\)* 、3 ([^|><?*\":\\/]*)?$

  • 第一段 就是匹配绝对路径最前面的盘符名称,比如D:\,你可能会奇怪了,为什么这里不是一个\而是三个,这就是我觉得这个方法bug的地方,正常来说,正则表达式确实只用写一个\就可以了,但是这里在需要三个\来做转义,这还有别于2中[pattern]中的转义
  • 第二段 匹配的是D:\之后的路径地址,比如CSDN\,这里正则的意思是 : 匹配除了 |><?*":\/ 这些Windows文件不允许出现的字符外的所有字符加上\的零次或多次 ,所以这里就包含了中英文和其他常见字符 ,相当于做了排除法;需要特别提醒的是,这里的[]里的\只需要一个\就可以转义
  • 第三段 是做了一个特殊处理,什么特殊处理呢?就是当有一种情况,如果不写第三段就会出现问题,比如D:\CSDN\我的博客,第二段只能匹配到 文件夹+\ ,最后的文件夹如果不带\,则无法匹配;为了处理这种情况,我们写了第三段;第三段意思是匹配以仅以一个文件夹名结尾的字符串零次或一次;若最后有\,则前两个匹配生效;若没有最后的\则在前两个基础上,第三个也生效了
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

angelavor

觉得有收获,给我个三连吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值