Memadankan Teks Berbilang Baris dengan Ungkapan Biasa
Memadankan teks berbilang baris selalunya memerlukan pengendalian pemisah baris dan berlabuh. Apabila menggunakan kelas Pattern Java, terdapat dua pengubah suai yang boleh membantu dengan ini: Pattern.MULTILINE dan String.matches(). Walau bagaimanapun, mungkin terdapat kekeliruan antara penggunaannya.
Corak.MULTILINE lwn. (?m)
Corak.MULTILINE dan (?m) kedua-duanya mempunyai tujuan yang sama : membenarkan ^ dan $ untuk dipadankan pada permulaan dan penghujung setiap baris, bukannya hanya pada permulaan dan akhir keseluruhan rentetan.
String.matches() vs. Pattern.matcher()
String.matches() menjangkakan ungkapan biasa sepadan dengan keseluruhan rentetan. Ini bermakna penggunaannya boleh dihadkan apabila berurusan dengan teks berbilang baris.
Menyelesaikan Contoh
Dalam contoh yang disediakan, (?m) digunakan dengan String.matches( ), di situlah letak masalahnya. Memandangkan ungkapan biasa hanya menangkap sebahagian daripada teks berbilang baris, String.matches() gagal memadankan keseluruhan rentetan dan mengembalikan palsu.
Penggunaan Betul untuk Padanan Berbilang Baris
Untuk memadankan teks berbilang baris dengan betul, anda harus menggunakan Pattern.compile() dengan pengubah suai Pattern.DOTALL, yang membenarkan titik (.) untuk memadankan aksara baris baharu. Berikut ialah versi kod yang dikemas kini:
String test = "User Comments: This is \t a\ta \n test \n\n message \n"; String pattern = "^\s*User Comments:\s*(.*)"; Pattern regex = Pattern.compile(pattern, Pattern.DOTALL); Matcher regexMatcher = regex.matcher(test); if (regexMatcher.find()) { String result = regexMatcher.group(1); }
Kod ini akan berjaya menangkap teks selepas "Komen Pengguna:" pada berbilang baris.
Atas ialah kandungan terperinci Bagaimana untuk Memadankan Teks Berbilang Baris dengan Betul dengan Ungkapan Biasa Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!