基于JSch库用正则表达式筛选SFTP服务器中的指定文件
正确匹配SFTP目录中三类文件的正则表达式
别担心,正则新手踩点坑太正常了!你之前的表达式没生效主要是对正则规则的理解偏差,咱们一步步捋清楚:
为什么你的原表达式不生效?
- 正则里的
*不是你以为的“匹配任意字符”(那是glob模式里的*),它的作用是匹配前面的字符0次或多次。比如UploadBusinessLicense_*会匹配UploadBusinessLicense后面跟0个或多个下划线,完全不是你要的“匹配前缀后的任意内容”。 - 你在
|两边加了空格,正则会把空格当成要匹配的字符之一,但你的文件名里并没有空格,这直接导致匹配失败。 - 另外你也漏掉了第三类
CustomerConsentForm_开头的文件~
正确的正则表达式
要精准匹配你提到的三类文件,用这个表达式就可以:
^(UploadBusinessLicense_|GovernmentPhotoID_|CustomerConsentForm_).+\.jpg$
拆解每个部分的作用:
^:锁定文件名的开头,确保只有以这三个前缀开头的文件才会被选中(UploadBusinessLicense_|GovernmentPhotoID_|CustomerConsentForm_):分组结构,用|分隔三个前缀,意思是“匹配这三个前缀中的任意一个”.+:匹配任意非换行字符至少一次,对应你文件名里的xyzbus_<随机数>这类可变内容\.jpg:匹配.jpg后缀,这里的.必须加反斜杠转义——因为正则里.是特殊字符,代表任意单个字符,转义后才会匹配真实的点号$:锁定文件名的结尾,确保文件确实以.jpg结束,不会误匹配比如xxx.jpg.txt这类带多余后缀的文件
备选:用glob模式更简单(多数SFTP工具支持)
如果你的SFTP客户端支持glob模式(比如FileZilla、WinSCP这类主流工具都支持),其实不用正则也能轻松搞定,写法更直观:
UploadBusinessLicense_*.jpg GovernmentPhotoID_*.jpg CustomerConsentForm_*.jpg
这里的*就是你原本理解的“匹配任意字符”,用空格分隔多个模式,就能一次性选中三类文件~
内容的提问来源于stack exchange,提问作者tofan bal
相关产品推荐
相关产品推荐

