Rumah >pembangunan bahagian belakang >C++ >Bolehkah Ungkapan Biasa Mengimbangi Tanda Kurung dengan Berkesan?
Menggunakan Ungkapan Biasa untuk Mengesahkan Tanda Kurung Seimbang
Walaupun ungkapan biasa berkuasa, mengimbangi kurungan dengan sempurna hanya menggunakan regex sememangnya sukar. Walau bagaimanapun, kita boleh mencipta regex yang berkesan mengesahkan kurungan seimbang dalam konteks tertentu. Pendekatan berikut menunjukkan kaedah:
Regex untuk Pengesahan Kurungan:
<code>func([a-zA-Z_][a-zA-Z0-9_]*) # Function name \( # Opening parenthesis (?: [^()] # Match any character except parentheses | (?<open> \( ) # Match opening parenthesis, add to 'open' stack | (?<-open> \) ) # Match closing parenthesis, remove from 'open' stack )+ (?(open)(?!)) # Fails if 'open' stack is not empty \) # Closing parenthesis</code>
Cara ia Berfungsi:
Reex ini memanfaatkan kumpulan pengimbangan (tersedia dalam banyak enjin regex, tetapi bukan semua).
(?<open> ( )
dan (?<-open> ) )
gunakan kumpulan tangkapan bernama. (?<open> ...)
menambah kurungan pembukaan yang dipadankan pada timbunan bernama "terbuka". (?<-open> ...)
mengalih keluar kurungan penutup yang sepadan daripada tindanan "terbuka".(?(open)(?!))
ialah ungkapan bersyarat. Ia menyemak sama ada timbunan "terbuka" kosong. Jika ia tidak kosong (tanda kurungan tidak seimbang), keseluruhan perlawanan gagal.Contoh:
Diberi rentetan input: "test -> funcPow((3),2) * (9 1)"
Reeks mengecam dengan betul "funcPow((3),2)"
sebagai ungkapan kurungan yang seimbang. Ia akan tidak sepadan dengan "funcPow((3),2) * (9 1)
kerana kurungan luar tidak seimbang.
Had:
regex ini hanya berfungsi untuk kurungan yang berkaitan secara langsung dengan panggilan fungsi (seperti yang ditakrifkan oleh func([a-zA-Z_][a-zA-Z0-9_]*)
). Panggilan fungsi bersarang dalam kurungan tidak dikendalikan. Untuk mengimbangi kurungan yang benar-benar mantap merentas struktur bersarang yang kompleks, pendekatan berasaskan bukan regex (seperti algoritma berasaskan tindanan) secara amnya diperlukan.
Atas ialah kandungan terperinci Bolehkah Ungkapan Biasa Mengimbangi Tanda Kurung dengan Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!