5

私は Java OCP について勉強していますが、現時点では「グループのキャプチャ」セクションを理解するのに苦労しています。説明としては抽象的すぎる。(時間があれば)「グループのキャプチャ」を使用した実際の例をいくつか教えてください。

次のステートメントの具体例を教えてくれる人はいますか?

グループのキャプチャは、複数のキャラクターを 1 つのユニットとして扱う方法です。これらは、グループ化する文字を一連の括弧内に配置することによって作成されます。たとえば、正規表現 (dog) は、文字「d」、「o」、および「g」を含む単一のグループを作成します。キャプチャ グループに一致する入力文字列の部分はメモリに保存され、後で後方参照を介して呼び出すことができます (セクション「後方参照」で後述)。

具体例を見ればすぐにわかると思います。

前もって感謝します。

4

5 に答える 5

13

特に、正規表現を使用すると、正規表現のさまざまな部分と一致した入力の一部を取得できます。マッチ全体が必要な場合もありますが、多くの場合、マッチの一部のみが必要です。たとえば、次の正規表現は"Page X of Y"文字列に一致します。

Page \d+ of \d+

文字列を渡す場合

Page 14 of 203

文字列全体に一致します。14ここで、とのみが必要だとしましょう203。問題ありません。正規表現ライブラリを使用すると、2 つを括弧で囲み、一致から と 文字列のみ\d+を取得できます。"14""203"

Page (\d+) of (\d+)

上記の式は、2 つのキャプチャ グループを作成します。パターンに一致するMatcherオブジェクトを使用すると、これらのグループのコンテンツを個別に取得できます。

Pattern p = Pattern.compile("Page (\\d+) of (\\d+)");
String text = "Page 14 of 203";
Matcher m = p.matcher(text);
if (m.find()) {
    System.out.println(m.group(1));
    System.out.println(m.group(2));
}

これにより、 と が出力14され203ます。

ideone のデモ

于 2013-04-16T13:24:43.130 に答える
2

キャプチャ グループを使用すると、Matcher にクエリを実行して、文字列のどの部分が正規表現の特定の部分と一致したかを調べることができます。次の例を参照してください。

String dateStr = "1981-06-25";

Pattern datePatt = Pattern.compile("([0-9]{4})/([0-9]{2})/([0-9]{2})");
...
Matcher m = datePatt.matcher(dateStr);
if (m.matches()) {
    int year  = Integer.parseInt(m.group(1));
    int month = Integer.parseInt(m.group(2));
    int day   = Integer.parseInt(m.group(3));
}

変数 year、month、および day には、それぞれグループ 1、2、および 3 の値が含まれます。

于 2013-04-16T13:32:12.500 に答える
1

試合の一部を追跡したい場合に使用します。たとえば、正規表現がある場合

/^(http|ftp).*/

一致が得られたら、グループの一致を照会して、それが http か ftp かを知ることができます。

于 2013-04-16T13:22:51.577 に答える
0

たとえば、正規表現を取ります

cat (dog )?bus

cat dog busこれは、文字列との両方に一致しますcat bus。これdogは、?. 括弧で囲んでいない場合は、最後のスペースのみがオプションになります。

James while John (had )+a better effect on the teacher

文字列に一致します

James while John had had had had had had had had had had had a better effect on the teacher

had文字列全体の 1 つ以上と一致するためです。

また、代替および後方参照をキャプチャ グループで使用することもできます (まだ十分に理解していないことです)。

(cat|dog) is a \1

\1、最初のキャプチャ グループでキャプチャされたものへの参照です。これはdog is a dogandcat is a catに一致しますが、一致しないか、dog is a catまたはその逆です。

于 2013-04-16T13:26:16.083 に答える
0

ここでは、簡単に理解できるコード例をいくつか示します。

基本的に、あなたの中にあるものは()、試合後に覚えています。そして、そのグループに一致する文字列を確認できます。2 番目の一致を行う場合、これらの値は 2 番目の一致に置き換えられるため、必要な場合は、定義した変数に一致の直後に保存する必要があることに注意してください。

于 2013-04-16T13:26:33.910 に答える