Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana Memadankan Kejadian Regex Di Luar Petikan, Walaupun dengan Petikan Terlepas?

Bagaimana Memadankan Kejadian Regex Di Luar Petikan, Walaupun dengan Petikan Terlepas?

Linda Hamilton
Linda Hamiltonasal
2024-10-25 04:56:29431semak imbas

How to Match Regex Instances Outside of Quotes, Even with Escaped Quotes?

Memadankan Kejadian Regex Di Luar Petikan: Satu Pendekatan Alternatif

Dalam soalan sebelumnya, adalah dicadangkan bahawa memadankan semua kejadian regex di luar petikan adalah mustahil. Walau bagaimanapun, ini tidak sepenuhnya tepat.

Penyelesaian kepada masalah ini terletak pada pengiktirafan bahawa sesuatu perkataan berada di luar petikan jika terdapat bilangan petikan genap mengikutinya. Ini boleh dimodelkan sebagai pernyataan pandangan ke hadapan:

\+(?=([^"]*"[^"]*")*[^"]*$)

Walau bagaimanapun, ini tidak mengambil kira petikan yang dilepaskan. Untuk mengendalikan perkara ini, ungkapan diubah suai untuk mengabaikan aksara seterusnya jika garis miring ke belakang ditemui sebelum petikan:

\+(?=([^"\]*(\.|"([^"\]*\.)*[^"\]*"))*[^"]*$)

Ungkapan kompleks ini memastikan bahawa semua kejadian regex bukan dalam petikan dipadankan, walaupun dalam kehadiran petikan yang dilepaskan.

Alternatif Umum untuk Kaedah .split() dan .replace()

Walaupun penyelesaian regex ini berfungsi dengan baik, ia mungkin tidak sesuai untuk semua kes, terutamanya apabila menggunakan kaedah .split() dan .replace(). Pendekatan alternatif ialah menggunakan langkah berikut:

  1. Pisah rentetan kepada segmen berdasarkan petikan.
  2. Gunakan regex pada segmen yang bukan dalam petikan.
  3. Sambungkan kembali segmen, memastikan petikan diletakkan dengan betul.

Pendekatan ini lebih fleksibel dan boleh digunakan dalam julat senario yang lebih luas.

Atas ialah kandungan terperinci Bagaimana Memadankan Kejadian Regex Di Luar Petikan, Walaupun dengan 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