0

myString.match("[\d]*") は、12345 および 77777 に対して true を返します

しかし、私が探しているのは、12345 の場合は false、7777 の場合は true です。

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 に答える