Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah .NET Ekspresi biasa menggunakan kumpulan mengimbangi untuk mengendalikan struktur bersarang?

Bagaimanakah .NET Ekspresi biasa menggunakan kumpulan mengimbangi untuk mengendalikan struktur bersarang?

DDD
Lepaskan: 2025-01-29 22:16:10
asal
390 orang telah melayarinya

.NET Ekspresi biasa dalam ungkapan biasa: Senjata pengendalian struktur bersarang

Artikel ini membincangkan ciri -ciri kumpulan keseimbangan unik dari enjin ekspresi biasa .NET, yang membolehkan beberapa contoh kumpulan pendua dalam mod ekspresi biasa dan operasi.

mengulangi kumpulan

Tidak seperti enjin ekspresi biasa yang lain, .NET membenarkan akses kepada pelbagai hasil tangkapan kumpulan penangkapan yang sama. Contohnya:

Gunakan rentetan "ABCD":
<code>(.)+</code>
Salin selepas log masuk

    .NET Enjin ekspresi biasa yang disimpan semua empat tangkapan (satu setiap aksara) dalam timbunan.
  • Kumpulan pertama akan memasukkan penangkapan ini:
  • CaptureCollection 0: "a"

      1: "B"
    • 2: "C"
    • 3: "D"
    kumpulan keseimbangan
  • Kumpulan keseimbangan menunjukkan
, yang membolehkan secara selektif mengeluarkan tangkapan dari timbunan. Apabila menghadapi kumpulan keseimbangan, ia memeriksa sama ada terdapat sebarang penangkapan dalam timbunan kumpulan yang ditentukan. Jika ya, penangkapan terakhir (dikeluarkan) muncul dari timbunan kumpulan.

Sebagai contoh, pertimbangkan ungkapan biasa berikut:

(?<name>)

Pemadanan ungkapan biasa ini adalah dua perkataan yang dipisahkan oleh aksara bukan kata.

<code>(?<word>\w+)\W+(?<-word>\w+)</code>
Salin selepas log masuk
Kumpulan baki akan dikeluarkan dalam timbunan yang dibuat oleh
    yang pertama.
  • mod keadaan (?<-word>) mod keadaan, ditulis sebagai (?<word>), digabungkan dengan kumpulan baki. Dengan menggunakan tingkah laku timbunan stack kosong kumpulan keseimbangan, mod keadaan membolehkan untuk mengesahkan corak yang lebih rumit berdasarkan sama ada timbunan kumpulan baki yang ditentukan kosong.
Sebagai contoh, pengesahan ekspresi biasa berikut mengesahkan sama ada kurungan rentetan dipasangkan dengan betul:

(?(condition)truePattern|falsePattern) Ia menekan setiap kurungan kiri ke dalam timbunan dan menangkap setiap pendakap kanan.

mod keadaan Pastikan timbunan kosong pada akhir rentetan.

<code>^(?:[^()]|(?<Open>[(])|(?<-Open>[)]))*(?(Open)(?!))$</code>
Salin selepas log masuk
    kurungan bersarang dan menangkap kandungan
  • Untuk menangkap kandungan pendakap bersarang, anda boleh menggunakan tatabahasa
  • . Tatabahasa ini: (?(Open)(?!$))
  • Tangkapan dari timbunan B;
Tekan kandungan penangkapan dan kumpulan semasa ke dalam timbunan A.

Menggunakan fungsi ini, ungkapan biasa berikut bukan sahaja dapat mengesahkan rentetan tanda kurung, tetapi juga menangkap kandungan setiap bersarang: (?<a-b>)

    Kumpulan keseimbangan, mod bersyarat dan
  • tatabahasa menyediakan fungsi yang kuat untuk pemadanan ekspresi biasa peringkat tinggi, terutamanya apabila memproses struktur bersarang.

Atas ialah kandungan terperinci Bagaimanakah .NET Ekspresi biasa menggunakan kumpulan mengimbangi untuk mengendalikan struktur bersarang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan