我已经经历过: Regex to match four repeated letters in a string using a Java pattern 和 Regular expression to match any character being repeated more than 10 times
但它们在我的情况下没用。如果我只想检查一个字符串是否包含重复的字符(如1111,abccccd,12aaaa3b等),它们就可以了。我想要的是检查字符串是否完全由重复字符组成,即aabb111,1111222,11222aaa等。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:12)
使用((.)\2+)+
作为模式:
String pattern = "((.)\\2+)+";
System.out.println("a".matches(pattern)); // false
System.out.println("1aaa".matches(pattern)); // false
System.out.println("aa".matches(pattern)); // true
System.out.println("aabb111".matches(pattern)); // true
System.out.println("1111222".matches(pattern)); // true
System.out.println("11222aaa".matches(pattern)); // true
System.out.println("etc.".matches(pattern)); // false
关于模式:
(...)
:将匹配的部分捕获为组。 (从1开始)
((.)\2+)+
^^
|+----- group 2
+----- group 1
(.)
:匹配任何字符(换行符除外)并将其捕获为 2 组(因为它在括号后面)。\2
:对匹配组的反向引用。如果(.)
与某个字符x
匹配,\2
与另一个x
匹配(不是任何字符,只有x
)。PATTERN+
:匹配PATTERN的一个或多个匹配项。(.)\2+
:匹配重复字符贪婪。