android过滤歌曲的正则表达式

思棉叶 2013-11-11 07:49:22
最近在做播放器,用系统的方法过滤选出sd卡上的音乐文件,发现有好多文件都只是一些无用的音频文件,采用
"^\\w+\\d.{5,}|\\w"

来过滤歌曲名,但奇怪为什么“b222aa2“这种形式的也可以匹配上呢?懂得给解释下,谢谢了。
...全文
876 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
思棉叶 2013-11-13
  • 打赏
  • 举报
回复
引用 7 楼 CuGBabyBeaR 的回复:
你用的函数是什么?
我的代码如下:

 music_name = “201206cet4”;
 Pattern pattern = Pattern.compile("^\\w+\\d{5,}|\\w");
 Matcher matcher = pattern.matcher(music_name);
 判断matcher.matches()的值为false.
CuGBabyBeaR 2013-11-13
  • 打赏
  • 举报
回复
引用 6 楼 azhengye 的回复:
[quote=引用 5 楼 CuGBabyBeaR 的回复:] 因为元字符 \w 中包括字母和数字字符 你可以将\w改为[a-zA-Z]
如你说说那201206cet4应该是可以匹配上的啊。 ^\\w -->以2开始,匹配 \\d{5,} --->01206正好5个数,匹配 可结果证明“^\\w+\\d{5,}|\\w”不匹配“201206cet4”。 或者我的理解是因为\\w+直接就匹配到了字符串的结尾,然后再匹配\\d{5,}时就导致匹配不成功?[/quote] 你用的函数是什么?
思棉叶 2013-11-13
  • 打赏
  • 举报
回复
引用 9 楼 CuGBabyBeaR 的回复:
[quote=引用 8 楼 azhengye 的回复:] [quote=引用 7 楼 CuGBabyBeaR 的回复:] 你用的函数是什么?
我的代码如下:

 music_name = “201206cet4”;
 Pattern pattern = Pattern.compile("^\\w+\\d{5,}|\\w");
 Matcher matcher = pattern.matcher(music_name);
 判断matcher.matches()的值为false.
[/quote] matches()函数是判断字符串整体是否符合正则表达式 201206确实能匹配到正则上 但是你的正则结尾是数字 所以后边加上字幕就不匹配了[/quote] 多谢,你的意思是cet搞的鬼,它们陪不上\d? 现在看起来这个错误太明显。明天再试试,结贴给分。再次谢谢。
CuGBabyBeaR 2013-11-13
  • 打赏
  • 举报
回复
引用 8 楼 azhengye 的回复:
[quote=引用 7 楼 CuGBabyBeaR 的回复:] 你用的函数是什么?
我的代码如下:

 music_name = “201206cet4”;
 Pattern pattern = Pattern.compile("^\\w+\\d{5,}|\\w");
 Matcher matcher = pattern.matcher(music_name);
 判断matcher.matches()的值为false.
[/quote] matches()函数是判断字符串整体是否符合正则表达式 201206确实能匹配到正则上 但是你的正则结尾是数字 所以后边加上字幕就不匹配了
  • 打赏
  • 举报
回复
(?is)^(?![a-z]).*?\\d{5,}.*
思棉叶 2013-11-12
  • 打赏
  • 举报
回复
引用 1 楼 CuGBabyBeaR 的回复:
正则被竖线分为两部分 第一部分 ^\w+\d.{5,} ^\w+表示 由一个以上的单词字符(大小写字母及数字)开头 \d表示有一个数字 .{5,}表示一个任意字符出现至少五次 第二部分 \w 一个单词字符 这两个部分是或的关系 对于任何能够匹配第一部分或者第二部分的字符串 都可以匹配上整个正则 b222aa2 是怎么匹配上的呢? 第二部分只有一个字符显然不是和它匹配 ^\w+ -> b // 至少一个单词字符 \d -> 2 // 一个数字 .{5,} -> 22aa2 // 刚好是5个任意字符 关于Java中正则表达式的使用 可以参考我的译文 http://blog.csdn.net/cugbabybear/article/details/14170355
首先多谢回复,按你所说的去理解,我看了下确实可以匹配上。但我现在还有疑惑在向你请教下。我最开始的正则是这样写的:
^\\w+\\d{5,}|\\w
目的是过滤掉以英文字符开头并且含5个以上数字的字符串,但发现没有过滤掉形如,0604a_3907413nGf,BBC0702_243243223snP, 201206cet4。前两个因为包含"_"的原因没匹配上,但为什么201206cet4也没能匹配上呢?或者你有更好的表达式吗?
思棉叶 2013-11-12
  • 打赏
  • 举报
回复
引用 5 楼 CuGBabyBeaR 的回复:
因为元字符 \w 中包括字母和数字字符 你可以将\w改为[a-zA-Z]
如你说说那201206cet4应该是可以匹配上的啊。 ^\\w -->以2开始,匹配 \\d{5,} --->01206正好5个数,匹配 可结果证明“^\\w+\\d{5,}|\\w”不匹配“201206cet4”。 或者我的理解是因为\\w+直接就匹配到了字符串的结尾,然后再匹配\\d{5,}时就导致匹配不成功?
依然绿茶 2013-11-12
  • 打赏
  • 举报
回复
楼上正解。。。
CuGBabyBeaR 2013-11-12
  • 打赏
  • 举报
回复
引用 3 楼 azhengye 的回复:
首先多谢回复,按你所说的去理解,我看了下确实可以匹配上。但我现在还有疑惑在向你请教下。我最开始的正则是这样写的:
^\\w+\\d{5,}|\\w
目的是过滤掉以英文字符开头并且含5个以上数字的字符串,但发现没有过滤掉形如,0604a_3907413nGf,BBC0702_243243223snP, 201206cet4。前两个因为包含"_"的原因没匹配上,但为什么201206cet4也没能匹配上呢?或者你有更好的表达式吗?
因为元字符 \w 中包括字母和数字字符 你可以将\w改为[a-zA-Z]
CuGBabyBeaR 2013-11-11
  • 打赏
  • 举报
回复
正则被竖线分为两部分 第一部分 ^\w+\d.{5,} ^\w+表示 由一个以上的单词字符(大小写字母及数字)开头 \d表示有一个数字 .{5,}表示一个任意字符出现至少五次 第二部分 \w 一个单词字符 这两个部分是或的关系 对于任何能够匹配第一部分或者第二部分的字符串 都可以匹配上整个正则 b222aa2 是怎么匹配上的呢? 第二部分只有一个字符显然不是和它匹配 ^\w+ -> b // 至少一个单词字符 \d -> 2 // 一个数字 .{5,} -> 22aa2 // 刚好是5个任意字符 关于Java中正则表达式的使用 可以参考我的译文 http://blog.csdn.net/cugbabybear/article/details/14170355

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧