199

このコードブロックを理解しようとしています。最初のものでは、式で何を探しているのでしょうか?

私の理解では、任意の文字 (0 回以上 *) の後に 0 から 9 までの任意の数字 (1 回以上 +) が続き、その後に任意の文字 (0 回以上 *) が続きます。

これを実行すると、結果は次のようになります。

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0

誰か私と一緒にこの問題を解決してくれませんか?

キャプチャ グループを使用する利点は何ですか?

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTut3 {

    public static void main(String args[]) {
        String line = "This order was placed for QT3000! OK?"; 
        String pattern = "(.*)(\\d+)(.*)";

        // Create a Pattern object
        Pattern r = Pattern.compile(pattern);

        // Now create matcher object.
        Matcher m = r.matcher(line);

        if (m.find()) {
            System.out.println("Found value: " + m.group(0));
            System.out.println("Found value: " + m.group(1));
            System.out.println("Found value: " + m.group(2));
        } else {
            System.out.println("NO MATCH");
        }
    }

}
4

4 に答える 4

6

あなたの理解は正しいです。ただし、次の手順を実行すると、次のようになります。

  • (.*)文字列全体を飲み込みます。
  • 満足できるように文字を返す必要があります(これががキャプチャされ、 がキャプチャされない(\\d+)理由です)。03000
  • 最後(.*)は残りをキャプチャします。

ただし、作者の当初の意図が何であったかはわかりません。

于 2013-07-31T11:49:51.180 に答える