Padankan Teks Berbilang Baris Menggunakan Ungkapan Biasa
Apabila cuba memadankan teks berbilang baris dengan Java, anda mungkin menghadapi cabaran menggunakan Pattern.MULTILINE pengubah suai dan ungkapan (?m). Berikut ialah contoh yang menerangkan perbezaan dan menyediakan penyelesaian:
Kami mempunyai teks berbilang baris berikut:
User Comments: This is \t a\ta \n test \n\n message \n
Corak dengan Corak.Pengubahsuai MULTILINE:
String pattern1 = "User Comments: (\W)*(\S)*"; Pattern p = Pattern.compile(pattern1, Pattern.MULTILINE); System.out.println(p.matcher(test).find()); // true
Corak ini berjaya memadankan teks kerana pengubah suai Pattern.MULTILINE membenarkan ^ dan $ sauh untuk dipadankan pada permulaan dan akhir setiap baris.
Corak dengan (?m) Ungkapan:
String pattern2 = "(?m)User Comments: (\W)*(\S)*"; System.out.println(test.matches(pattern2)); // false
Corak ini gagal padan kerana ungkapan (?m) adalah tidak betul. Ia sepatutnya (?s) untuk mendayakan mod DOTALL, yang membenarkan titik (.) untuk memadankan aksara baris baharu.
Selain itu, kaedah padanan() digunakan untuk menyemak sama ada keseluruhan rentetan sepadan dengan corak. Dalam kes ini, corak hanya sepadan dengan sebahagian daripada rentetan, jadi matches() mengembalikan false.
Penyelesaian:
Untuk memadankan teks berbilang baris dengan betul menggunakan ungkapan biasa , anda boleh menggunakan corak berikut dengan pengubah suai Pattern.DOTALL:
Pattern regex = Pattern.compile("^\s*User Comments:\s+(.*)", Pattern.DOTALL); Matcher regexMatcher = regex.matcher(subjectString); if (regexMatcher.find()) { ResultString = regexMatcher.group(1); }
Corak ini akan menangkap teks selepas "Pengguna Komen:" dan simpannya dalam ResultString.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memadankan Teks Berbilang Baris Dengan Betul Menggunakan Ungkapan Biasa Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!