Dalam ungkapan biasa, adalah mungkin untuk memisahkan rentetan menggunakan ruang sambil mengekalkan ruang dalam bahagian yang disebut. Begini cara untuk mencapai ini:
Untuk menangani isu dalam ungkapan asal anda, (?!"), yang berpecah pada ruang sebelum petikan, pertimbangkan ungkapan biasa berikut:
[^\s"']+|"([^"]*)"|'([^']*)'
Ini ungkapan menangkap tiga corak:
Untuk memisahkan rentetan, anda boleh menggunakan kod Java seperti ini:
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 membina senarai rentetan, menanggalkan petikan daripada perkataan yang dipetik dan mengekalkan ruang di dalamnya.
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan mengikut Ruang Semasa Memelihara Bahagian Dipetik Menggunakan Regex?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!