如果字符串只包含重复字符,那么查找正则表达式是什么?

时间:2014-01-23 08:16:56

标签: java regex string

我已经经历过: 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等。

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

1 个答案:

答案 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+:匹配重复字符贪婪。