22

次のコードでは:

public static void main(String[] args) {
    List<String> allMatches = new ArrayList<String>();
    Matcher m = Pattern.compile("\\d+\\D+\\d+").matcher("2abc3abc4abc5");
    while (m.find()) {
        allMatches.add(m.group());
    }

    String[] res = allMatches.toArray(new String[0]);
    System.out.println(Arrays.toString(res));
}

結果は次のとおりです。

[2abc3, 4abc5]

そうであってほしい

[2abc3, 3abc4, 4abc5]

どうすれば達成できますか?

4

3 に答える 3

17

後者から次のスキャンをマッチャーに開始させ\d+ます。

Matcher m = Pattern.compile("\\d+\\D+(\\d+)").matcher("2abc3abc4abc5");
if (m.find()) {
    do {
        allMatches.add(m.group());
    } while (m.find(m.start(1)));
}
于 2013-07-31T13:26:10.057 に答える