Memisahkan Teks Menggunakan Koma sambil Memelihara Petikan
Apabila menghuraikan teks yang dipisahkan koma, adalah penting untuk mengendalikan situasi di mana koma muncul dalam subrentetan yang disebut, seperti contoh ini:
123,test,444,"don't split, this",more test,1
Memisahkan rentetan ini pada koma menggunakan kaedah String.split(",") lalai menghasilkan:
123 test 444 "don't split this" more test 1
Seperti yang anda lihat, koma dalam petikan "jangan belah, ini" ditafsirkan secara salah sebagai pemisah.
Untuk menangani isu ini, pendekatan yang lebih canggih diperlukan. Dalam kes ini, kita boleh menggunakan ungkapan biasa untuk memisahkan rentetan pada koma yang tidak diikuti dengan bilangan petikan berganda genap. Ini memastikan koma di dalam subrentetan yang dipetik tidak disalah anggap sebagai pemisah.
str.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
Ungkapan biasa ini menggunakan logik berikut:
(?=): Pandang ke hadapan penegasan yang memastikan:
Dalam erti kata lain, pandangan ke hadapan ini menyemak sama ada koma semasa diikuti dengan nombor genap dua kali ganda petikan dan penghujung rentetan. Jika demikian, ini menunjukkan bahawa koma tidak berada di dalam subrentetan yang dipetik dan boleh dianggap sebagai pemisah.
Anda juga boleh menggunakan yang dipermudahkan. versi ungkapan biasa:
str.split("(?x) , (?= (?: [^\"]* \" [^\"]* \" )* [^\"]* $ )");
Dalam versi ini, pengubah suai (?x) digunakan untuk meningkatkan kebolehbacaan ungkapan biasa dengan mengabaikan aksara ruang putih.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memisahkan Teks Dipisahkan Koma Semasa Memelihara Petikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!