Kata pengantar
Artikel ini akan memperkenalkan kelas pola dan kelas pencocokan dalam ekspresi reguler Java. Pertama -tama, kita perlu memahami dengan jelas bahwa ekspresi reguler yang ditentukan sebagai string pertama -tama harus dikompilasi sebagai instance dari kelas pola. Oleh karena itu, bagaimana memahami kedua kelas ini adalah sesuatu yang harus diketahui oleh programmer.
Mari kita lihat dua kategori ini:
1. Konsep penangkapan kelompok
Grup penangkapan dapat diberi nomor dengan menghitung tanda kurung terbuka dari kiri ke kanan, yang dimulai dengan 1. Misalnya, dalam ekspresi ((a) (b (c))), ada empat kelompok tersebut:
1 ((a) (b (c))) 2 (a) 3 (b (c)) 4 (c)
Grup nol selalu mewakili seluruh ekspresi. Kelompok yang dimulai dengan (?) Adalah kelompok non-penangkapan murni yang tidak menangkap teks dan tidak menghitung terhadap jumlah kombo.
Input penangkapan yang terkait dengan grup selalu merupakan selanjutnya yang paling cocok dengan grup. Jika kelompok dihitung lagi karena kuantisasi, nilai yang ditangkap sebelumnya akan dipertahankan pada kegagalan perhitungan kedua (jika ada). Misalnya, mencocokkan string "ABA" dengan ekspresi (a (b)?)+ Akan mengatur grup kedua ke "B". Di awal setiap pertandingan, semua input yang ditangkap dibuang.
2. Penjelasan terperinci tentang pola dan kelas pencocokan
Ekspresi reguler Java diimplementasikan melalui kelas pola dan kelas pencocokan di bawah paket java.util.regex (disarankan agar Anda membuka dokumen Java API saat membaca artikel ini. Saat memperkenalkan metode mana yang diperkenalkan, periksa deskripsi metode dalam Java API, dan efeknya akan lebih baik).
Kelas pola digunakan untuk membuat ekspresi reguler, atau dapat dikatakan membuat pola yang cocok. Konstruktornya bersifat pribadi dan tidak dapat dibuat secara langsung, tetapi dapat membuat ekspresi reguler melalui metode pabrik sederhana dari Pattern.complie(String regex)
Contoh Kode Java:
Pola p = pola.compile ("// w+"); p.pattern (); // return/w+ pattern() mengembalikan bentuk string dari ekspresi reguler, yang sebenarnya merupakan parameter regex dari Pattern.complile(String regex)
1.pattern.split (input charsequence)
Pola memiliki metode split(CharSequence input) , yang digunakan untuk memisahkan string dan mengembalikan string []. Saya kira String.split(String regex) diimplementasikan melalui Pattern.split(CharSequence input) .
Contoh Kode Java:
Pola p = pola.compile ("// d+"); String [] str = p.split ("QQ saya adalah: 456456 Ponsel saya adalah: 0532214 Email saya adalah: [email protected]");Hasil: str [0] = "qq saya adalah:" str [1] = "ponsel saya adalah:" str [2] = "email saya adalah: [email protected]"
2. Pattern.matcher (String Regex, Input Charsequence) adalah metode statis yang digunakan untuk mencocokkan string dengan cepat. Metode ini cocok untuk dicocokkan hanya sekali dan mencocokkan semua string.
Contoh Kode Java:
Pattern.matches("//d+","2223");//Return true Pattern.matches("//d+","2223aa");//Return false, all strings need to be matched to return true, here aa cannot match Pattern.matches("//d+","22bb23");//Return false, all strings need to be matched to return true, here bb cannot match3.pattern.matcher (input charsequence)
Setelah banyak mengatakan, akhirnya giliran kelas pertandingan untuk debut. Pattern.matcher(CharSequence input) Mengembalikan objek pencocokan.
Metode konstruktor kelas pencocokan juga pribadi dan tidak dapat dibuat sesuka hati. Ini hanya dapat memperoleh contoh dari kelas ini melalui metode Pattern.matcher(CharSequence input) .
Kelas pola hanya dapat melakukan beberapa operasi pencocokan sederhana. Untuk mendapatkan operasi pencocokan reguler yang lebih kuat dan lebih nyaman, perlu untuk bekerja sama dengan pola dan pencocokan. Kelas pencocokan menyediakan dukungan pengelompokan untuk ekspresi reguler dan beberapa dukungan pencocokan untuk ekspresi reguler.
Contoh Kode Java:
Pola p = pola.compile ("// d+"); Pencocokan m = p.matcher ("22BB23"); m.pattern (); // return p yang akan mengembalikan objek pola mana yang dibuat oleh objek pencocokan.4.matcher.matches ()/matcher.lookingat ()/matcher.find ()
Kelas pencocokan menyediakan tiga metode operasi pencocokan. Ketiga metode mengembalikan tipe Boolean. Kembalikan true ketika pertandingan tercapai. Jika tidak ada kecocokan, itu mengembalikan false.
matches() cocok dengan seluruh string, dan mengembalikan true hanya jika seluruh string cocok
Contoh Kode Java:
Pola p = pola.compile ("// d+"); Pencocokan m = p.matcher ("22BB23"); m.matches (); // return false, karena bb tidak dapat dicocokkan oleh/d+, menghasilkan pencocokan seluruh string tidak berhasil. Pencocokan m2 = p.matcher ("2223"); m2.matches (); // return true, karena/d+ cocok dengan seluruh string Mari kita lihat kembali pada Pattern.matcher(String regex,CharSequence input) , yang setara dengan kode berikut
Pattern.compile(regex).matcher(input).matches()
lookingAt() cocok dengan string sebelumnya, dan mengembalikan true hanya jika string yang cocok ada di depan.
Contoh Kode Java:
Pola p = pola.compile ("// d+"); Pencocokan m = p.matcher ("22BB23"); m.lookingat (); // return true, karena/d+ cocok dengan 22 pencocokan sebelumnya m2 = p.matcher ("aa2223"); m2.lookingat (); // return false, karena/d+ tidak dapat cocok dengan AA sebelumnya find() cocok dengan string, dan string yang cocok bisa di mana saja.
Contoh Kode Java:
Pola p = pola.compile ("// d+"); Pencocokan m = p.matcher ("22BB23"); m.find (); // return true matcher m2 = p.matcher ("aa2223"); m2.find (); // return true matcher m3 = p.matcher ("aa2223bb"); m3.find (); // return true matcher m4 = p.matcher ("aabb"); m4.find (); // return false5.mathcer.start ()/matcher.end ()/matcher.group ()
Setelah menggunakan matches() , lookingAt() , dan find() untuk melakukan operasi pencocokan, Anda dapat menggunakan tiga metode di atas untuk mendapatkan informasi yang lebih rinci.
start() mengembalikan posisi indeks dari substring pencocokan dalam string.
end() mengembalikan posisi indeks dari karakter terakhir dari substring yang cocok di string.
group() mengembalikan substring yang cocok
Contoh Kode Java:
Pola p = pola.compile ("// d+"); Pencocokan m = p.matcher ("AAA2223BB"); M.Find (); // Cocokkan 2223 m.start (); // return 3 m.end (); // return 7, nomor indeks setelah 2223 m.group (); // return 2223 Mathcer m2 = m.matcher ("2223bb"); m.lookingat (); // Cocokkan 2223 M.Start (); // return 0, karena lookat () hanya bisa cocok dengan string sebelumnya, saat menggunakan lookat () untuk mencocokkan, metode start () selalu mengembalikan 0 m.end (); // kembalikan 4 m.group (); // return 2223 Matcher M3 = M.Matcher ("2223bb"); M.Matches (); // Cocokkan seluruh string m.start (); // kembalikan 0, saya percaya semua orang tahu alasan M.end (); // Return 6, saya percaya semua orang tahu alasannya, karena pertandingan () perlu mencocokkan semua string m.group (); // Kembalikan 2223bb Setelah banyak mengatakan, saya percaya semua orang memahami penggunaan metode di atas. Kita harus berbicara tentang bagaimana pengelompokan ekspresi reguler digunakan di Java.
Ada metode yang kelebihan beban untuk start() , end() , dan group() Mereka start(int i) , end(int i) , group(int i) khusus untuk operasi grup. Kelas Mathcer juga memiliki groupCount() untuk mengembalikan berapa banyak kelompok yang ada.
Contoh Kode Java:
Pola p = pola.compile ("([az]+) (// d+)"); Pencocokan m = p.matcher ("AAA2223BB"); m.find (); // Cocokkan AAA2223 M.GroupCount (); // return 2, karena ada 2 kelompok M.Start (1); // return 0 Mengembalikan nomor indeks grup pertama substring yang cocok di string M.Start (2); // pengembalian 3 m.end (1); // Mengembalikan 3 Mengembalikan posisi indeks dari karakter terakhir dari grup pertama substring yang cocok di string. M.end (2); // mengembalikan 7 m.group (1); // mengembalikan AAA, mengembalikan grup pertama dari substring yang cocok M.Group (2); // kembalikan 2223, kembalikan set kedua substring pencocokan Sekarang mari kita gunakan operasi pencocokan reguler yang sedikit lebih tinggi, misalnya, ada sepotong teks dengan banyak angka di dalamnya, dan angka-angka ini dipisahkan. Sekarang kita perlu mengambil semua angka dalam teks. Sangat mudah untuk menggunakan operasi reguler Java.
Contoh Kode Java:
Pola p = pola.compile ("// d+"); Pencocokan m = p.matcher ("QQ saya adalah: 456456 Ponsel saya adalah: 0532214 Email saya adalah: [email protected]"); while (m.find ()) {System.out.println (m.group ()); }Keluaran:
456456 0532214 123
Jika Anda mengganti loop di atas while() dengan
while (m.find ()) {System.out.println (m.group ()); System.out.print ("Start:"+M.start ()); System.out.println ("end:"+m.end ()); }Lalu output:
456456 Mulai: 6 Akhir: 12 0532214 Mulai: 19 Akhir: 26 123 Mulai: 36 Akhir: 39
Sekarang semua orang harus tahu bahwa setelah setiap operasi pencocokan, nilai -nilai dari tiga metode start() , end() , dan group() akan diubah, dan akan diubah menjadi informasi dari substring yang cocok, dan metode kelebihan beban mereka juga akan diubah menjadi informasi yang sesuai.
Catatan: Hanya ketika operasi pencocokan berhasil dapat Anda gunakan tiga metode start() , end() , dan group() , jika tidak java.lang.IllegalStateException akan dilemparkan, yaitu, ketika salah satu metode matches() , lookingAt() , find() return true, itu hanya dapat digunakan.
Meringkaskan
Di atas adalah semua konten artikel ini. Saya berharap konten artikel ini akan membantu studi atau pekerjaan Anda. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.