首页 新闻 搜索 专区 学院

JAVA正则表达式中的逻辑运算符

0
悬赏园豆:20 [已解决问题] 解决于 2016-05-04 15:49

我想要实现一个功能,如下

"aaaaa123baaasdgaa32a2dfgaaaa"
* 取出字符串中连续的5个、1个、3个a的字符串
* 最后输出
* aaaaa
* aaa
* a

我自己用了如下正则

 1 String regex = "a{5}||a{3}||a{1}";
 2         /*    上面这个正则输出下面
 3          *     aaaaa
 4             aaa
 5             a
 6             a
 7             a
 8             aaa
 9             a
10             不符合要求
11          */
12         
13 String str = "aaaaa123baaasdgaa32a2dfgaaaa";
14         
15 Matcher m = Pattern.compile(regex).matcher(str);
16         
17 while(m.find())
18     System.out.println(m.group());

我知道输出结果错误的原因是因为字符串中的aaaa是连续4个a,符合正则表达式或运算的最后一个表达式:a{1}。但是我现在想要实现的就只是输出连续5个、3个和一个a。请各位大神指教,并想知道关于正则表达式中的逻辑运算符方面的心得。帮助文档中的没有介绍啊!如果问的不够详细也请回复。谢谢

 

斯巴达之狐的主页 斯巴达之狐 | 初学一级 | 园豆:184
提问于:2016-05-02 16:00
< >
分享
最佳答案
1

(?<!a)(a{5}|a{3}|a)(?!a)

收获园豆:20
jello chen | 大侠五级 |园豆:7096 | 2016-05-02 21:33

运用了正则的特殊构造模式,匹配字串前面不是a,后面也不是a。厉害啊!!感谢指教!!

斯巴达之狐 | 园豆:184 (初学一级) | 2016-05-04 15:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册