Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Memadankan Teks Berbilang Baris Dengan Betul Menggunakan Ungkapan Biasa Java?

Bagaimanakah Saya Boleh Memadankan Teks Berbilang Baris Dengan Betul Menggunakan Ungkapan Biasa Java?

Barbara Streisand
Barbara Streisandasal
2024-12-10 11:30:10192semak imbas

How Can I Correctly Match Multiline Text Using Java Regular Expressions?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn