myString.match(“[\ d] *”)给出了12345和77777的真实
但我正在寻找的是12345的假,而7777是真的
答案 0 :(得分:4)
(\d)\1*\D
将测试重复的相同数字,然后是非数字。 \1
指的是(...)
匹配的值,它将是第一个数字。
(不确定最后你想要什么 - 你可能想要$
交换\D
(行尾) - 但你需要一些东西让778失败)
答案 1 :(得分:2)
安德鲁库克提出的解决方案是一个很好的开始 - 他的表达方式可以完美地捕捉重复的数字。然而,为了发现只有重复的数字,我认为你需要使用边界匹配器,如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]);
}
}
}
我希望它有所帮助。