Memisahkan Teks Dibatasi dengan Petikan Terbenam
Apabila menghuraikan teks yang mengikut format yang dibataskan koma, mengendalikan petikan terbenam boleh menimbulkan cabaran. Artikel ini menangani isu ini, menyediakan penyelesaian untuk memisahkan rentetan pada koma sambil mengekalkan integriti teks yang disertakan dalam petikan.
Pertimbangkan teks berikut:
123,test,444,"don't split, this",more test,1
Menggunakan Rentetan asas. kaedah split(",") akan menghasilkan keputusan berikut:
123 test 444 "don't split this" more test 1
Walau bagaimanapun, matlamatnya adalah untuk mengekalkan teks yang dipetik sebagai entiti tunggal:
123 test 444 "don't split, this" more test 1
Untuk mencapai ini, kami menggunakan penyelesaian berasaskan ungkapan biasa:
str.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
Ungkapan ini memisahkan rentetan berdasarkan koma yang diikuti dengan bilangan genap petikan berganda. Ini memastikan koma dalam teks yang dipetik diabaikan sebagai pembatas.
Memahami Ungkapan Biasa:
Sintaks Alternatif:
Untuk kebolehbacaan, anda juga boleh memecahkan ungkapan biasa kepada berbilang baris menggunakan (?x) pengubah suai:
String[] arr = str.split("(?x) " + ", " + // Split on comma "(?= " + // Followed by " (?: " + // Start a non-capture group " [^\"]* " + // 0 or more non-quote characters " \" " + // 1 quote " [^\"]* " + // 0 or more non-quote characters " \" " + // 1 quote " )* " + // 0 or more repetition of non-capture group (multiple of 2 quotes will be even) " [^\"]* " + // Finally 0 or more non-quotes " $ " + // Till the end (This is necessary, else every comma will satisfy the condition) ") " // End look-ahead );
Pendekatan ini memastikan pemisahan teks yang dibataskan dengan tepat, mengambil kira kedua-dua koma dan petikan terbenam.
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan Dibatasi Koma dengan Petikan Terbenam?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!