Meletup Rentetan dengan Petikan Terbenam
Meletup rentetan menggunakan fungsi explode() standard boleh menjadi masalah apabila berurusan dengan teks dalam tanda petikan. Untuk mencapai hasil yang diinginkan dalam menganggap perkataan yang dipetik sebagai entiti tunggal, pendekatan yang lebih canggih diperlukan.
Menggunakan Ungkapan Biasa
Ekspresi biasa menyediakan penyelesaian yang berkuasa untuk tugas ini . Regex berikut sepadan dengan rentetan yang dipetik yang membenarkan petikan yang dilepaskan:
"(?:\.|[^\"])*"|\S+
Corak ini boleh digunakan dengan preg_match_all() untuk mengekstrak kedua-dua perkataan yang dipetik dan tidak dipetik daripada rentetan:
$text = 'Lorem ipsum "dolor sit amet" consectetur "adipiscing \"elit" dolor'; preg_match_all('/"(?:\.|[^\"])*"|\S+/', $text, $matches);
Tatasusunan yang terhasil akan mengandungi yang dikehendaki output:
Array ( [0] => Array ( [0] => Lorem [1] => ipsum [2] => "dolor sit amet" [3] => consectetur [4] => "adipiscing \"elit" [5] => dolor ) )
Penjelasan
Corak regex terdiri daripada dua bahagian:
Kumpulan bukan tangkap (?:...) memastikan bahawa petikan yang dilepaskan tidak ditangkap sebagai padanan berasingan.
Mengendalikan Peratus Dikodkan Petikan
Jika rentetan anda mengandungi petikan berkod peratus dan bukannya petikan berganda, ubah suai regex kepada:
%22(?:\.|(?!%22).)*%22|\S+
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meletupkan Rentetan dengan Sebut Harga Terbenam, Termasuk Sebut Harga Terlepas dan Peratusan Dikodkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!