.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"
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!