【问题标题】:What is a regular expression to find if string contains only repeating characters?查找字符串是否仅包含重复字符的正则表达式是什么?
【发布时间】:2014-01-23 08:16:56
【问题描述】:

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

谁能帮我解决这个问题?

【问题讨论】:

  • 重复的字符一定要相邻吗?
  • 你的意思是说每个字符都应该重复正确..?
  • 是的.. 字符串应该只包含重复的字符。因此,与正则表达式模式相比,像 111222az 这样的字符串不应返回 true

标签: java regex string


【解决方案1】:

使用((.)\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+:贪婪匹配重复字符。

【讨论】:

  • 好东西+1,但可能是一个解释的想法;您正在使用后插入器。
  • 这真的匹配aaa吗?比如,为什么不(.)(\1)*
  • @EmilLundberg,1 将返回 true。对于aaa111,它也会返回false。
  • 如果使用非捕获外部组,这种模式可能会更加明显。
  • @KiranParmar,您可以使用单词字符 \w。但它也匹配下划线 (_)。见Java Platform SE documentation - Summary of regular-expression constructs
猜你喜欢
  • 2017-05-03
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 2022-12-28
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
相关资源
最近更新 更多