如何匹配任何大写字母后跟相应的小写字母?

Spa*_*ker 7 java regex

我有一个要求,即一个名字不能以3个相同的字母开头而忽略它们的情况.名称以大写字母开头,后跟小写字母.

基本上我可以将整个名称转换为大写,然后匹配正则表达式(\p{Lu})\1{3,}.*.

但我想知道是否存在符合上述要求的正则表达式,并且不需要对要匹配的字符串进行任何预处理.那么我可以使用什么正则表达式匹配字符串Aa,Dd或者Uu没有明确指定任何可能的组合?

编辑:
我接受了Markos的回答.我只需要修复它以使用长度为1和2的名称并将其锚定在开头.所以我的用例的实际正则表达式是^(\p{Lu})(\p{Ll}?$|(?=\p{Ll}{2})(?i)(?!(\1){2})).

我也赞成了Evgeniy和sp00m的答案,帮助我学习正则表达式的一课.

谢谢你的努力.

Mar*_*nik 3

我承认站在巨人的肩膀上(这里的其他海报),但这个解决方案实际上适用于您的用例:

final String[] strings = { "Aba", "ABa", "aba", "aBa", "Aaa", "Aab" }; 
final Pattern p = Pattern.compile("(\\p{Lu})(?=\\p{Ll}{2})(?i)(?!(\\1){2})");
for (String s : strings) System.out.println(s + ": " + p.matcher(s).find());
Run Code Online (Sandbox Code Playgroud)

现在我们有:

  1. 匹配前面的一个大写字符;
  2. 后面两个小写字符的前瞻断言;
  3. 另一个预测断言这两个字符与第一个字符不同(忽略大小写)。

输出:

阿巴:确实如此
阿巴:假的
阿巴:假的
阿巴:假的
啊啊:假的
阿布:是的