Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Meletupkan Rentetan dengan Sebut Harga Terbenam, Termasuk Sebut Harga Terlepas dan Peratusan Dikodkan?

Bagaimanakah Saya Boleh Meletupkan Rentetan dengan Sebut Harga Terbenam, Termasuk Sebut Harga Terlepas dan Peratusan Dikodkan?

Susan Sarandon
Susan Sarandonasal
2024-12-21 08:58:10406semak imbas

How Can I Explode a String with Embedded Quotations, Including Escaped and Percent-Encoded Quotes?

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:

  • Rentetan yang dipetik: Dilampirkan dalam petikan berganda, ia membenarkan petikan melarikan diri menggunakan \.
  • Perkataan tanpa petikan: Memadankan sebarang jujukan aksara bukan ruang putih.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn