myString.match("[\d]*") は、12345 および 77777 に対して true を返します
しかし、私が探しているのは、12345 の場合は false、7777 の場合は true です。
myString.match("[\d]*") は、12345 および 77777 に対して true を返します
しかし、私が探しているのは、12345 の場合は false、7777 の場合は true です。
(\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]);
}
}
}
お役に立てば幸いです。