myString.match("[\d]*") 为 12345 和 77777 提供 true
但我正在寻找的内容对于 12345 来说是错误的,对于 7777 来说是真的
myString.match("[\d]*") 为 12345 和 77777 提供 true
但我正在寻找的内容对于 12345 来说是错误的,对于 7777 来说是真的
(\d)\1*\D
将测试重复的相同数字,然后是非数字。the\1
指的(...)
是与第一个数字匹配的值。
(不知道你最后想要什么 - 你可能想要交换$
(行尾)\D
- 但你需要一些东西让 778 失败)
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]);
}
}
}
我希望它有所帮助。