JavaRush /Blog Java /Random-MS /Pautan balik dalam Ungkapan Biasa Java
eGarmin
Tahap

Pautan balik dalam Ungkapan Biasa Java

Diterbitkan dalam kumpulan
Rujukan belakang dalam ungkapan biasa Java ialah ciri yang sangat berguna yang disokong oleh enjin Java . Untuk memahami apa itu pautan balik, anda perlu belajar memahami apa itu kumpulan . Kumpulan dalam ungkapan biasa menganggap berbilang aksara sebagai satu unit. Kumpulan dicipta dengan meletakkan aksara dalam kurungan – “()”. Sepasang kurungan ialah satu kumpulan. Pautan balik adalah mudah kerana kami boleh mengulangi corak carian tanpa menyalinnya secara langsung. Kita hanya perlu merujuk kepada kumpulan yang ditakrifkan sebelum ini menggunakan pembinaan seperti \N , di mana N ialah nombor kumpulan. 2 contoh berikut memberi anda rasa untuk kemudahan pautan balik.
Contoh 1: Mencari Corak Berulang
Pembinaan borang (\d\d\d)\1 sepadan dengan baris 123123, tetapi bukan baris 123456. String str = "ля123123ля"; Pattern p = Pattern.compile("(\\d\\d\\d)\\1"); Matcher m = p.matcher(str); System.out.println(m.groupCount()); while (m.find()) { String word = m.group(); System.out.println(word + " " + m.start() + " " + m.end()); } Output: 1 123123 2 8 Nota penterjemah! Di sini, sebagai penterjemah, saya ingin mengambil sedikit kebebasan dan menyelitkan komen daripada diri saya sendiri, kerana Saya sendiri baru belajar tentang ungkapan biasa dan saya berharap mereka akan membetulkan saya dengan kata-kata makian :) jika apa yang saya tulis di bawah adalah ralat: 1) Kaedah groupCount () Mengembalikan bilangan kumpulan yang dinyatakan dalam corak, jadi walaupun jika rentetan input ialah "la123" 456 la", yang tidak sesuai dengan templat, nombor 1 masih akan dipaparkan pada skrin. 2) Kaedah find() Mencari kumpulan seterusnya, tetapi hanya mengembalikan nilai boolean : true – found, false – not found 3) group() Kaedah Mengembalikan subrentetan terakhir yang ditemui daripada corak. Dalam kes ini 123123 4) Kaedah mula() Mengembalikan kedudukan subrentetan yang ditemui dalam rentetan sumber (penomboran, sudah tentu, bermula dari sifar) 5) Kaedah end() Mengembalikan kedudukan dalam rentetan sumber serta-merta berikutan yang ditemui subrentetan. Oleh itu, nilai ini tidak menunjuk kepada aksara terakhir subrentetan yang ditemui dalam rentetan sumber, tetapi kepada aksara seterusnya selepasnya.
Contoh 2: Mencari perkataan pendua
String pattern = "\\b(\\w+)\\b[\\w\\W]*\\b\\1\\b"; Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE); String phrase = "unique is not duplicate but unique, Duplicate is duplicate."; Matcher m = p.matcher(phrase); while (m.find()) { String val = m.group(); System.out.println("Найденная последовательность символов: \"" + val + "\""); System.out.println("Слово-дубликат: " + m.group(1) + "\n"); } Kesimpulan: Найденная последовательность символов: "unique is not duplicate but unique" Слово-дубликат: unique Найденная последовательность символов: "Duplicate is duplicate" Слово-дубликат: Duplicate Sila ambil perhatian bahawa kaedah mencari perkataan pendua (menggunakan ungkapan biasa) ini tidak optimum. Sebagai contoh, dalam contoh di atas, perkataan pertama "pendua" dilangkau.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION