2014-01-23 7 views
4

我已经经历已经过去了: Regex to match four repeated letters in a string using a Java patternRegular expression to match any character being repeated more than 10 times什么是正则表达式来查找字符串是否只包含重复字符?

但他们并不在我的情况非常有用。如果我只想检查一个字符串是否包含重复字符(如1111,abccccd,12aaaa3b等),那么它们都可以。我想要检查的字符串是否完全由重复字符组成,即aabb111,1111222,11222aaa等。

任何人都可以帮我解决这个问题吗?

+0

重复的字符必须相邻吗? – Bathsheba

+0

尝试'((。)\ 2 +)*'。 – Njol

+0

你的意思是说每个角色都应该重复吧..? – TheLostMind

回答

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:反向引用匹配的组。如果(.)与一个字符x匹配,则\2与另一个x(不是任何字符,但只有x)匹配。
  • PATTERN+:匹配一个或多个PATTERN匹配。
  • (.)\2+:匹配重复字符贪婪。
+0

好东西+1,但可能是一个想法来解释;你正在使用后面的插件。 – Bathsheba

+0

这是否真的符合'aaa'?如在,为什么不''(。)(\ 1)*'? –

+0

@EmilLundberg,请参阅http://ideone.com/78z3sN。 – falsetru

相关问题