我把D:\zip\a.mp3这样的文件分割为D:\zip\a.mp30.cut、D:\zip\a.mp31.cut……
现在要把他们恢复,所以要查找D:\zip\a.mp3*.cut这样格式的文件。
我之前把MP3文件分割为多个片,放到了源MP3文件所在的目录下了,
现在我获取文件所在的目录,然后列出文件名,要在里边匹配符合要求的,就是那些碎片文件,想把他们在恢复回去。
怎么写正则表达式????
现在要把他们恢复,所以要查找D:\zip\a.mp3*.cut这样格式的文件。
我之前把MP3文件分割为多个片,放到了源MP3文件所在的目录下了,
现在我获取文件所在的目录,然后列出文件名,要在里边匹配符合要求的,就是那些碎片文件,想把他们在恢复回去。
怎么写正则表达式????
里边有a.mp30.cut、a.mp31.cut、a.mp32.cut等文件,我要查找的是文件名是a.mp3*.cut样的文件,然后对其操作,如何识别他是这样的文件呢?String[] ss=path.list();
for(String s:ss)
……这个不用正则表达式的话,怎么写?正则表达式的话,又是怎么写?
a.mp3*.cut要精确匹配,不能是含有这个段字符串,是要和它完全匹配的。
a.mp3我保存到了一个字符串prefix里了,prefix+"[0-9]"+".cut"可以匹配的还有类似……a.mp3*.cut……样的字符串。要怎么才能让它精确匹配?$还是什么其他符号,怎么写?
非要正则,那就 String reg = "a.mp\\d+.cut";s.matches(reg)
实例:
Pattern p=Pattern.compile(" ^(a.mp3\\d.cut){1,1}$");
Matcher m = p.matcher(args[0]);
boolean b = m.matches();
比如aXmp33xcut也可以被匹配, .号是要被转义的,代表任意字符
\\d也有问题,因为你不知道mp3会被分割成多少片,那么有可能大于10,仅仅一个\\d只能匹配到0-9
看自己需要写成\\d{1,2} 1到2位数字.
String mp3Name = "I'm Yours - Jason Mraz.mp3";
Pattern p = Pattern.compile("^\\Q" + mp3Name + "\\E\\d{1,2}\\.cut$");
/*
"^\\Q" + mp3Name + "\\E\\d{1,2}\\.cut$"
用\\Q \\E把 mp3Name包起来的原因是担心mp3的名字中含有特殊转义字符,可能会引起匹配失败
所以用引用模式,类似于对引用中的内容进行Pattern.LITERAL就不会进行转义了.
\\Q表示引用开始
\\E表示引用结束.
*/
Matcher m = p.matcher(mp3Name + "33.cut");
System.out.println(m.matches());