Grup dalam ekspresi reguler adalah konsep yang sangat penting, dan merupakan jembatan kita menuju aplikasi ekspresi reguler tingkat lanjut.
Konsep grup.
Hasil pencocokan ekspresi reguler dapat dibagi menjadi beberapa bagian. Setelah Anda dapat menggunakan grup secara fleksibel, Anda akan menemukan bahwa Regex sangat nyaman dan kuat.
Mari kita ambil contoh dulu:
public static void Main()
{
string s = "21-2-2005";
Regex reg = Regex baru(@"(?<y>d{4})-(?<m>d{1,2})-(?<d>d{1,2})",Opsi Regex .Dikompilasi);
Pertandingan pertandingan = reg.Match(s);
int tahun = int.Parse(pertandingan.Grup["y"].Nilai);
int bulan = int.Parse(pertandingan.Grup["m"].Nilai);
int hari = int .Parse(pertandingan.Grup["d"].Nilai);
DateTime time = DateTime baru (tahun, bulan, hari);
Console.WriteLine(waktu);
Konsol.ReadLine();
}
Contoh di atas menganalisis string melalui grup dan mengubahnya menjadi instance DateTime. Tentu saja, fungsi ini dapat dengan mudah diimplementasikan menggunakan metode DateTime.Parse.
Dalam contoh ini, saya menggunakan (?<name>) untuk membagi hasil Pertandingan menjadi tiga kelompok "y", "m", dan "d" yang masing-masing mewakili tahun, bulan, dan hari.
Sekarang kita sudah mempunyai konsep grup, mari kita lihat cara mengelompokkannya. Caranya sangat sederhana. Selain cara di atas, kita juga bisa mendefinisikan grup dengan sepasang tanda kurung.
kekosongan statis publik Utama()
{
string s = "21-2-2005";
Regex reg = Regex baru(@"(d{4})-(d{1,2})-(d{1,2})",RegexOptions.Compiled);
Pertandingan pertandingan = reg.Match(s);
int tahun = int.Parse(pertandingan.Grup[1].Nilai);
int bulan = int.Parse(pertandingan.Grup[2].Nilai);
int hari = int .Parse(pertandingan.Grup[3].Nilai);
DateTime time = DateTime baru (tahun, bulan, hari);
Console.WriteLine(waktu);
Konsol.ReadLine();
}
Seperti dapat dilihat dari contoh di atas, grup yang termasuk dalam pasangan braket pertama secara otomatis diberi nomor 1, dan kurung berikut diberi nomor 2, 3...
public static void Main()
{
string s = "21-2-2005";
Regex reg = Regex baru(@"(?<2>d{4})-(?<1>d{1,2})-(?<3>d{1,2})",Opsi Regex .Dikompilasi);
Pertandingan pertandingan = reg.Match(s);
int tahun = int.Parse(pertandingan.Grup[2].Nilai);
int bulan = int.Parse(pertandingan.Grup[1].Nilai);
int hari = int .Parse(pertandingan.Grup[3].Nilai);
DateTime time = DateTime baru (tahun, bulan, hari);
Console.WriteLine(waktu);
Konsol.ReadLine();
}
atas
, kita menggunakan (?<number>) untuk memberi nomor secara manual pada grup setiap pasangan braket (perhatikan bahwa saya tidak menentukan posisi 1 dan 2 dari kiri ke kanan).
kita Mengetahui tiga cara untuk mendefinisikan Grup untuk Regex dan cara terkait untuk mereferensikan hasil pencocokan grup.
Kemudian mengenai definisi grup, perlu diperhatikan dua hal lagi:
1. Karena tanda kurung digunakan untuk mendefinisikan grup, jadi jika ingin mencocokkan "(" dan ")", silakan gunakan "(" dan ")" (tentang semua khusus Untuk definisi karakter, silakan periksa dokumentasi bantuan ekspresi Regex yang relevan).
2. Jika opsi ExplicitCapture digunakan saat mendefinisikan Regex, contoh kedua tidak akan berhasil, karena opsi ini memerlukan grup yang ditentukan secara eksplisit dengan nomor atau nama untuk menangkap dan menyimpan hasilnya Jika Anda mendefinisikan ekspresi yang mirip dengan (A|B), dan Anda tidak ingin menangkap hasil dari (A|B) ini, Anda dapat menggunakan sintaks "grup yang tidak menangkap", yang didefinisikan sebagai ( ?:) Metode, untuk (A|B), Anda dapat mendefinisikannya seperti ini untuk mencapai tujuan tidak menangkap dan menyimpannya dalam koleksi Grup - (?:A|B).