Memisahkan Rentetan dengan Ruang Tidak Termasuk Segmen Dipetik
Dalam bidang ungkapan biasa, tugas membelah rentetan pada ruang sambil mengekalkan segmen yang disebut boleh menakutkan pengguna baru. Untuk menangani cabaran ini, kami mencari penyelesaian yang mantap yang memisahkan rentetan input kami dengan tepat kepada elemen konstituennya.
Rentetan contoh yang disediakan membentangkan kes khusus di mana ruang menyempadankan perkataan, tetapi tidak dalam segmen petikan tunggal atau dua kali. Output yang diingini mengekalkan segmen yang disebut ini, memastikan frasa seperti "akan" atau 'ungkapan biasa' kekal utuh.
Ungkapan biasa yang sesuai untuk tugasan ini adalah sangat mudah:
[^\s"']+|"([^"]*)"|'([^']*)'
Memecahkan ungkapan ini:
Untuk menggunakan ungkapan ini dalam Java, kami boleh menggunakan kod berikut:
List<String> matchList = new ArrayList<>(); Pattern regex = Pattern.compile("[^\s\"']+|\"([^\"]*)\"|'([^']*)'"); Matcher regexMatcher = regex.matcher(subjectString); while (regexMatcher.find()) { if (regexMatcher.group(1) != null) { // Add double-quoted string without the quotes matchList.add(regexMatcher.group(1)); } else if (regexMatcher.group(2) != null) { // Add single-quoted string without the quotes matchList.add(regexMatcher.group(2)); } else { // Add unquoted word matchList.add(regexMatcher.group()); } }
Kod ini berulang pada rentetan input, menangkap segmen yang disebut dan tidak disebut, menghasilkan senarai elemen pecahan. Sebagai alternatif, kita boleh menggunakan versi yang lebih ringkas:
List<String> matchList = new ArrayList<>(); Pattern regex = Pattern.compile("[^\s\"']+|\"[^\"]*\"|'[^']*'"); Matcher regexMatcher = regex.matcher(subjectString); while (regexMatcher.find()) { matchList.add(regexMatcher.group()); }
Versi yang dipermudahkan ini termasuk elemen yang disebut dan tidak disebut dalam senarai.
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan mengikut Ruang Semasa Mengekalkan Segmen Dipetik Menggunakan Ungkapan Biasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!