Java Academy · Pelajaran

Kumpulan Tangkapan

Ekstrak subrentetan yang sepadan

Pelajaran 3 daripada 413 langkah

Kumpulan Tangkapan ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.

Apakah Itu Kumpulan Tangkapan

Kurungan ( ) dalam ungkapan nalar mencipta kumpulan tangkapan. Selepas padanan, anda boleh mengekstrak teks setiap kumpulan secara berasingan, sesuai untuk menghurai data berstruktur.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(\\d+)-(\\d+)").matcher("42-99");
        if (m.find()) {
            System.out.println(m.group(1));
            System.out.println(m.group(2));
        }
    }
}

Kumpulan 0 ialah Keseluruhan Padanan

group(0) (atau group()) mengembalikan keseluruhan teks yang sepadan. Kumpulan bernombor bermula pada 1.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(\\d+)px").matcher("width: 24px");
        if (m.find()) {
            System.out.println(m.group(0));
            System.out.println(m.group(1));
        }
    }
}

Mengira Kumpulan

groupCount() melaporkan bilangan kumpulan tangkapan dalam corak, tidak termasuk kumpulan 0.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})").matcher("2026-05-30");
        if (m.find()) System.out.println(m.groupCount());
    }
}

Menghurai Tarikh

Kumpulan tangkapan memudahkan anda memecahkan nilai berformat kepada beberapa bahagian.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})").matcher("2026-05-30");
        if (m.matches()) {
            System.out.println("year=" + m.group(1));
            System.out.println("month=" + m.group(2));
            System.out.println("day=" + m.group(3));
        }
    }
}

Kumpulan Bernama

Namakan kumpulan dengan (?<name>...) dan dapatkannya semula menggunakan namanya. Ini menjadikan corak jauh lebih mudah dibaca.

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

public class Main {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("(?<user>\\w+)@(?<host>\\w+\\.\\w+)");
        Matcher m = p.matcher("alice@example.com");
        if (m.find()) {
            System.out.println(m.group("user"));
            System.out.println(m.group("host"));
        }
    }
}

Sempadan Kumpulan

start(n) dan end(n) memberikan julat indeks kumpulan tertentu dalam masukan.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(\\d+)").matcher("abc123");
        if (m.find()) {
            System.out.println(m.start(1) + " to " + m.end(1));
        }
    }
}

Kumpulan Tanpa Tangkapan

Gunakan (?:...) untuk mengumpulkan pilihan atau pengkuantiti tanpa mencipta tangkapan bernombor. Ini memastikan nombor kumpulan kekal bermakna.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(?:Mr|Ms)\\.? (\\w+)").matcher("Ms. Smith");
        if (m.find()) System.out.println(m.group(1));
    }
}

Kumpulan Pilihan Mungkin Null

Jika kumpulan adalah pilihan dan tidak terlibat dalam padanan, group(n) mengembalikan null. Sentiasa kendalikan keadaan ini.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(\\d+)(px)?").matcher("50");
        if (m.matches()) {
            System.out.println(m.group(1));
            System.out.println(m.group(2));
        }
    }
}

Mengulangi Padanan dengan Kumpulan

Gabungkan find dalam gelung dengan pengekstrakan kumpulan untuk mengambil token berstruktur daripada teks yang lebih besar.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(\\w+)=(\\d+)").matcher("a=1 b=2 c=3");
        while (m.find()) {
            System.out.println(m.group(1) + " -> " + m.group(2));
        }
    }
}

Rujukan Balik dalam Corak

Dalam ungkapan nalar, \1 sepadan dengan teks yang sama seperti yang ditangkap oleh kumpulan terdahulu. Ini mengesan pengulangan, seperti perkataan berganda.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(\\w+) \\1").matcher("the the cat");
        System.out.println(m.find());
        System.out.println(m.group(1));
    }
}

Menyimpan Tangkapan dalam Rekod

Corak yang kemas: sepadankan, ekstrak kumpulan dan bina objek kecil. Di sini kita menggunakan rekod.

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

public class Main {
    record Point(int x, int y) {}

    public static void main(String[] args) {
        Matcher m = Pattern.compile("\\((\\d+),(\\d+)\\)").matcher("(3,7)");
        if (m.matches()) {
            Point p = new Point(Integer.parseInt(m.group(1)), Integer.parseInt(m.group(2)));
            System.out.println(p);
        }
    }
}

Semakan Pantas

Apakah yang dikembalikan oleh group(0) selepas padanan berjaya?

Ulang Kaji

Anda telah mengekstrak subrentetan yang sepadan:

  • Kurungan mencipta kumpulan bernombor; group(0) ialah keseluruhan padanan, manakala 1 dan ke atas ialah tangkapan.
  • (?<name>...) mencipta kumpulan bernama yang dibaca melalui group("name").
  • (?:...) mengumpulkan tanpa menangkap.
  • Kumpulan pilihan boleh menjadi null; \1 merujuk balik kepada kumpulan terdahulu.
Percuma untuk bermula

Pelajari Java dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
104
Pelajaran
374

Soalan Lazim

Adakah pelajaran “Kumpulan Tangkapan” percuma?

Ya — teks penuh “Kumpulan Tangkapan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Kumpulan Tangkapan”?

Ekstrak subrentetan yang sepadan Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Java Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Kumpulan Tangkapan” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Menyusun Corak
  2. Mencari dan Memadankan
  3. Kumpulan Tangkapan
  4. Penggantian dengan Regex
← Kembali ke Java Academy