让集合[abc]中的字母只能出现一次(不能连续出现),这个正则表达式如何写?

newcomer1983 2009-12-26 11:13:44
有这样一个表达式 12365cdnt1234 ,[abc] 不能连续出现.
如果这样写 [abc]{2,} 倒是可以找出错误的表示式,
但是反过来要正确匹配的表示式该怎么写, 用[abc]{1,1}的话 12365ccdnt1234 也匹配了.
...全文
352 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
让集合[abc]中的字母只能出现一次(不能连续出现)

------------------------------------------------
问题本身就很矛盾!

a, b, c 只出现一次,后面又加了一个“不能连续出现”,试问 123abcabc 这种算是出现一次,还是算没有连续出现呢?
  • 打赏
  • 举报
回复
import java.util.regex.Pattern;

public class MatcherDuplication {

public static void main(String[] args) {
String[] strs = {
"12365abbcdnt1234",
"12365cdnt1234",
"12356abcabc1234"
};
String regex = "(?:[^abc]*([abc])(?!\\1))*[^abc]*";
Pattern pattern = Pattern.compile(regex);
for(int i = 0; i < strs.length; i++) {
System.out.println(strs[i] + " --> " + pattern.matcher(strs[i]).matches());
}
}
}
beiouwolf 2009-12-26
  • 打赏
  • 举报
回复

String s = "11ab";

Pattern p = Pattern.compile("[abc]{2,}");
System.out.println(!p.matcher(s).find());
licip 2009-12-26
  • 打赏
  • 举报
回复
^([abc]{2,})这样写试一试。
newcomer1983 2009-12-26
  • 打赏
  • 举报
回复
[abc]{2,}取反 怎么写?
^[abc]{2,}不行
newcomer1983 2009-12-26
  • 打赏
  • 举报
回复
[abc][^abc] 不行,112aa还是匹配了.
beiouwolf 2009-12-26
  • 打赏
  • 举报
回复
[abc][^abc]
liquoryellow 2009-12-26
  • 打赏
  • 举报
回复
[abc]{2,}取反

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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