Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Mengekstrak Substring yang Dipetik dalam PHP, Mengabaikan Petikan Terlepas?

Bagaimanakah Saya Boleh Mengekstrak Substring yang Dipetik dalam PHP, Mengabaikan Petikan Terlepas?

Barbara Streisand
Barbara Streisandasal
2024-11-29 12:54:17757semak imbas

How Can I Extract Quoted Substrings in PHP, Ignoring Escaped Quotes?

Tidak Termasuk Petikan Melarikan Diri dalam PHP Regex

Dalam PHP, mengekstrak subrentetan yang disertakan dengan petikan tunggal atau berganda memerlukan perhatian yang teliti untuk melepaskan jujukan. Untuk mengabaikan petikan yang dilepaskan dalam rentetan yang dipadankan, kita boleh menggunakan ungkapan biasa lanjutan.

Pertimbangkan kod berikut:

$code = preg_replace_callback('/"(.*?)"/', array(&$this, '_getPHPString'), $code);
$code = preg_replace_callback("#'(.*?)'#", array(&$this, '_getPHPString'), $code);

regeks ini sepadan dengan subrentetan antara petikan, tetapi ia gagal mengecualikan petikan yang terlepas . Untuk menangani isu ini, kami menggunakan corak regex yang lebih komprehensif:

Regex Disyorkan:

  • Petikan Berganda Subrentetan:

    "[^"\\]*(?:\\.[^"\\]*)*"/s
  • Sarisari Petikan Tunggal:

    /'[^'\\]*(?:\\.[^'\\]*)*'/s

Regeks ini membenarkan mana-mana watak yang tidak dilepaskan, termasuk aksara yang dilepaskan (cth., "n" dan "t"), dan jujukan melarikan diri-melarikan diri ("").

Penjelasan:

  • [^"\\]* sepadan dengan sifar atau lebih aksara bukan petikan atau sengkang ke belakang.
  • (?:\\.[^"\\]*)* sepadan dengan sebarang bilangan aksara yang dilepaskan diikuti dengan aksara bukan petikan atau sengkang ke belakang.
  • Pengubah suai mendayakan pemadanan satu baris, yang diperlukan untuk menjangkau berbilang baris.

Dengan menggabungkan regeks ini, anda boleh mengekstrak subrentetan dengan tepat yang termasuk aksara melarikan diri dalam rentetan yang dipetik.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengekstrak Substring yang Dipetik dalam PHP, Mengabaikan Petikan Terlepas?. 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