0

myString.match("[\d]*") 为 12345 和 77777 提供 true

但我正在寻找的内容对于 12345 来说是错误的,对于 7777 来说是真的

4

2 回答 2

4
(\d)\1*\D

将测试重复的相同数字,然后是非数字。the\1指的(...)是与第一个数字匹配的值。

(不知道你最后想要什么 - 你可能想要交换$(行尾)\D- 但你需要一些东西让 778 失败)

于 2012-05-21T18:14:02.277 回答
2

Andrew Cooke 提出的解决方案是一个很好的开始——他捕捉重复数字的表达方式非常有效。尽管如此,为了发现只有重复的数字,我相信您需要使用边界匹配器,如 http://docs.oracle.com/javase/tutorial/essential/regex/bounds.html中所述。

我创建了一小段代码,向您展示如何执行它:

public static void main(String[] args) {
  Pattern pattern = Pattern.compile("^(\\d)\\1*$");
  String[] testArray = {"1111", "2111", "1111 ", "1111 2", "1234", "9999"};
  for (int i=0; i<teste.length; i++) {
     Matcher matcher = pattern.matcher(testArray[i]);
     boolean found=false;
     while (matcher.find()) {
         System.out.println("Text " + matcher.group() + " found at " + matcher.start()+" ending at index "+matcher.end());
         found=true;
     }
     if (!found) {
        System.out.println("not found for "+testArray[i]);
     }
  }
}

我希望它有所帮助。

于 2012-05-21T18:53:18.967 回答