Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah komponen ungkapan biasa "[^][]" berfungsi dalam memadankan kurungan segi empat sama bersarang?

Bagaimanakah komponen ungkapan biasa "[^][]" berfungsi dalam memadankan kurungan segi empat sama bersarang?

Susan Sarandon
Susan Sarandonasal
2024-11-07 07:03:02580semak imbas

How does the

Apakah Maksud Regex "[^][]"?

Dalam regex yang disediakan:

\[(?:[^][]|(?R))*\]

komponen regex "[^][]" ialah kelas aksara yang sepadan dengan mana-mana aksara kecuali "[" atau "]".

Penjelasan Kelas Aksara

A kelas watak sepadan dengan mana-mana watak dalam julat aksara yang diberikan. Dalam kes ini, "[^]" bermaksud "tidak diikuti oleh ]", jadi "[^][]" secara berkesan sepadan dengan mana-mana watak yang tidak diikuti oleh "]".

Rekursi Regex

Kurungan di sekeliling "[^][]" menunjukkan kumpulan yang tidak menangkap. Di dalam kumpulan, token "?R" mewakili rujukan rekursif kepada keseluruhan regex. Ini membolehkan regex memadankan kurungan persegi bersarang.

Mengelakkan Urutan Melarikan Diri

Perhatikan bahawa, dalam PCRE (enjin regex yang digunakan oleh fungsi preg_ PHP), ia tidak diperlukan untuk melepaskan "[" atau "]" dalam kelas aksara. Ini kerana tidak jelas bahawa "]" dalam "[^][]" tergolong dalam kelas aksara.

Pengubah Suai xx Sebaris (PHP 7.3 )

Dalam PHP 7.3 , anda boleh menggunakan pengubah suai sebaris xx untuk mengabaikan aksara kosong dalam kelas aksara. Ini membolehkan anda menulis kelas yang kurang samar-samar berikut:

(?xx) [^ ][ ]     [ ] ]      [ [ ]      [^ [ ]

Keserasian dan Keanehan

Sintaks "[^][]" serasi dengan kebanyakan perisa regex , termasuk PCRE, Perl, Python, Java dan lain-lain. Walau bagaimanapun, ia tidak dikenali dalam Ruby dan JavaScript (kecuali dalam versi Internet Explorer yang lebih lama).

Pemadanan Kurungan Square Bersarang

Dalam konteks contoh regex anda, "[^][]" memastikan bahawa kurungan segi empat sama seimbang dipadankan, membolehkan padanan kurungan empat segi bersarang.

Nota Tambahan

  • "[^ ]]" tidak jelas kerana "[^]" sepadan dengan aksara yang tidak diikuti oleh "]", jadi "]" yang berikutnya tergolong dalam kelas aksara.
  • Pelayar JavaScript moden secara amnya mengikut spesifikasi ECMA, yang mentakrifkan " []" sebagai token regex yang sentiasa gagal dipadankan.
  • regex dioptimumkan yang disediakan "([[^][](?:(?-1)[^][] )* ])" mempertingkatkan prestasi dengan mengelakkan pertukaran yang tidak perlu.

Atas ialah kandungan terperinci Bagaimanakah komponen ungkapan biasa "[^][]" berfungsi dalam memadankan kurungan segi empat sama bersarang?. 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