Regex untuk Memisahkan Rentetan Menggunakan Ruang
Apabila bekerja dengan rentetan, kita selalunya perlu membahagikannya kepada perkataan individu untuk analisis atau pemprosesan. Walau bagaimanapun, ruang dalam teks yang dipetik (cth., "Ini adalah rentetan") tidak boleh dianggap sebagai pemisah. Ungkapan biasa (Regex) menawarkan cara yang berkuasa untuk mengendalikan tugas pemisahan yang kompleks itu.
Soalan:
Buat ungkapan Regex untuk membelah rentetan menggunakan ruang, mengabaikan ruang yang dikelilingi secara tunggal atau berganda petikan.
Contoh:
Input: "Ini ialah rentetan yang "akan" diserlahkan apabila 'ungkapan biasa' anda sepadan dengan sesuatu."
Diingini Output:
This is a string that will be highlighted when your regular expression matches something.
Jawapan:
Walaupun ungkapan (?!") yang disediakan tidak berpecah dengan betul, ungkapan Regex yang komprehensif boleh dirumuskan seperti berikut:
Ungkapan ini secara berkesan menangkap dua jenis elemen:
Teks Dipetik:
Pelaksanaan Java:
Kod Java berikut menggambarkan cara menggunakan ini Regex untuk memisahkan rentetan:
import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexSplitter { public static void main(String[] args) { String subjectString = "This is a string that \"will be\" highlighted when your 'regular expression' matches something."; // Pattern that matches unquoted words, quoted texts, and the capturing groups Pattern regex = Pattern.compile("[^\s\"']+|\"([^\"]*)\"|'([^']*)'"); Matcher regexMatcher = regex.matcher(subjectString); // List to store the split words List<String> matchList = new ArrayList<>(); while (regexMatcher.find()) { // Check for capturing groups to exclude quotes 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()); } } // Display the split words for (String word : matchList) { System.out.println(word); } } }
Output:
This is a string that will be highlighted when your regular expression matches something
Perbincangan yang dipertingkatkan ini menjelaskan masalah dan menyediakan ungkapan Regex yang lebih tepat dan komprehensif, bersama-sama dengan pelaksanaan Java terperinci untuk menunjukkan penggunaannya.
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan Menggunakan Ruang Sambil Mengabaikan Ruang Dalam Petikan Menggunakan Regex?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!